为什么 cv2.write 保存黑色图像?

Why cv2.write saves black images?

大家好,大家好

我正在使用我在网上找到的这段代码,对图像应用维纳过滤器,代码:

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)

问题是当我使用 Matplotlib 绘制结果时,我得到了这个:

但是 当我键入 cv2.imwrite("wiener result 2.jpeg",deconvolved_img) 保存图像时,我得到了这个:

为什么我保存的时候图片是黑色的??

有两种方法可以将图像保存为文件:

方法一:使用matplotlib

由于您正在使用 matplotlib 库来显示图像 plt.show(),您可以使用相同的库来保存您的图,也可以使用 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()

方法二:使用OpenCV

您也可以使用 OpenCV 保存文件。

但在保存图像之前需要进行转换。图像变量 deconvolved_img float 数据类型,取值范围在 [0 - 1] 之间。因此,当您保存此类图像时,它们会被视为黑色图像。

在 OpenCV 中,您可以将图像转换为 int 数据类型,并使用 cv2.normalize() 函数缩放预期 [0 - 255] 之间的像素强度:

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