cv2.imshow和cv2.imwrite

Mat*_*ias 4 python opencv

有人可以解释为什么OpenCV imshowimwrite函数似乎会产生完全不同的图像吗?

第一张图片对应,imshow第二张图片对应imwrite. Result是一个介于0和255之间的浮点值数组.

**result = result.astype(np.uint8)**
cv2.imshow('img', result)
cv2.imwrite('img.png', result)
Run Code Online (Sandbox Code Playgroud)

目标 结果

BCo*_*nic 10

我在OpenCV 2.4.8中使用了以下(c ++)代码:

cv::Mat_<float> img(300,300);
cv::theRNG().fill(img,cv::RNG::UNIFORM,0,255);
cv::imshow("Img",img);
cv::waitKey();
cv::imwrite("test.png",img);
Run Code Online (Sandbox Code Playgroud)

它会产生以下图像:

在此输入图像描述

imshow.

在此输入图像描述

imwrite.

这是由于两个函数的范围期望不同,imwrite总是期望[0,255],而imshow浮点需要[0,1],无符号​​字符需要[0,255].

为了显示正确的输出imshow,您需要将浮点图像的范围从[0,255]缩小到[0,1].您可以使用convertTo和使用适当的缩放系数,或者只是将图像除以255.