Home > Blockchain >  Why cv2.write saves black images?
Why cv2.write saves black images?

Time:04-30

hi folks, greetings

am using this code that I found on the web, to apply a wiener filter on an image, the code :

from scipy.signal.signaltools import deconvolve
from skimage import color, data, restoration
img = color.rgb2gray(img)
from scipy.signal import convolve2d
psf = np.ones((5, 5)) / 25
img = convolve2d(img, psf, 'same')
img  = 0.1 * img.std() * np.random.standard_normal(img.shape)
deconvolved_img = restoration.wiener(img, psf, 1100)

f, (plot1, plot2) = plt.subplots(1, 2)
plot1.imshow(img)
plot2.imshow(deconvolved_img)
plt.show()
cv2.imwrite("wiener result 2.jpeg",deconvolved_img)

the issue is when I plot the result using Matplotlib I get this :

enter image description here

but when I type cv2.imwrite("wiener result 2.jpeg",deconvolved_img) to save the image, I get this :

enter image description here

why do I get a black image when I save it ??

CodePudding user response:

There are two ways to save your images as a file:

Method 1: Using matplotlib

Since you are using matplotlib library to show the image plt.show(), you can use the same library to save your plots as well using plt.savefig()

plot1.imshow(img)
plot2.imshow(deconvolved_img)
plt.savefig('path_to_save)     # mention the path you want to save the plots
plt.show()

Method 2: Using OpenCV

You can also save your file using OpenCV.

But prior to saving your image there is a conversion required. The image variable deconvolved_img is of float data type, with values ranging between [0 - 1]. Hence when you save such images they are perceived as a black image.

In OpenCV you can convert your image to int data type and scaling the pixel intensities between the expected [0 - 255] using cv2.normalize() function:

result = cv2.normalize(deconvolved_img, dst=None, alpha=0, beta=255,norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
cv2.imwrite('path_to_save', result)    # mention the path you want to save the result
  • Related