有人可以解释为什么 OpenCV imshowimwrite 函数似乎导致完全不同的图像?

第一张图片对应 imshow ,第二张图片对应 imwriteResult 是 0 到 255 之间的浮点值数组。

**result = result.astype(np.uint8)**
cv2.imshow('img', result)
cv2.imwrite('img.png', result)

最佳答案

我在 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);

它会产生以下图像:

imshow

imwrite

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

为了使用 imshow 显示正确的输出,您需要将浮点图像的范围从 [0,255] 减少到 [0,1]。您可以使用 convertTo 和适当的缩放因子来执行此操作,或者只需将图像除以 255。

关于python - cv2.imshow和cv2.imwrite,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22488872/

10-12 23:52