有人可以解释为什么 OpenCV imshow
和 imwrite
函数似乎导致完全不同的图像?
第一张图片对应 imshow
,第二张图片对应 imwrite
。Result
是 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/