2024-04-25 06:30:33 发布
网友
有人能解释为什么OpenCV imshow和imwrite函数看起来会产生完全不同的图像吗?
imshow
imwrite
第一张图片对应于imshow,第二张图片对应于imwrite。 Result是介于0和255之间的浮点值数组。
Result
**result = result.astype(np.uint8)** cv2.imshow('img', result) cv2.imwrite('img.png', result)
由于您使用的是python,这可能有助于:
def showimg(img): cv2.namedWindow("test", cv2.WINDOW_NORMAL) img = np.array(img,dtype=float)/float(255) cv2.imshow('test',img) cv2.resizeWindow('test',600,600) cv2.waitKey(0)
我在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总是需要[0255],而imshow则需要[0,1]作为浮点,而[0255]作为无符号字符。
为了用imshow显示正确的输出,需要将浮点图像的范围从[0255]缩小到[0,1]。您可以使用convertTo和适当的缩放因子,或者只需将图像除以255。
convertTo
由于您使用的是python,这可能有助于:
我在OpenCV 2.4.8中使用了以下(c++)代码:
结果如下:
用
imshow
。用
imwrite
。这是由于这两个函数的范围期望值不同,
imwrite
总是需要[0255],而imshow
则需要[0,1]作为浮点,而[0255]作为无符号字符。为了用
imshow
显示正确的输出,需要将浮点图像的范围从[0255]缩小到[0,1]。您可以使用convertTo
和适当的缩放因子,或者只需将图像除以255。相关问题 更多 >
编程相关推荐