【问题标题】:cv2.imshow shows binary imagecv2.imshow 显示二进制图像
【发布时间】:2019-07-19 07:17:43
【问题描述】:

我有一个代码,其中矩阵 hip_dir 表示 RGB 图像。如果我检查它的形状,python 会返回 (1080, 1920, 3)。如果我写

cv2.imwrite('hip_dir.jpg',hip_dir)

我得到了保存在文件夹中的正确图像。但是,当我这样做时

cv2.imshow('img0',hip_dir)
cv2.waitKey(0)
cv2.destroyAllWindows()

我得到了相同的黑白图像(但是有一些蓝色像素,这让这更加奇怪)。

如何正确使用 imshow?

编辑:

使用命令 cv2.cvtColor 会导致如下错误:

error: OpenCV(4.1.0) c:\projects\opencv- 
python\opencv\modules\imgproc\src\color.simd_helpers.hpp:94: error:         
(-2:Unspecified error) in function '__cdecl cv::impl::`anonymous-namespace'::CvtHelper<struct cv::impl::`anonymous namespace'::Set<3,4,-1>,struct cv::impl::A0xe227985e::Set<3,4,-1>,struct cv::impl::A0xe227985e::Set<0,2,5>,2>::CvtHelper(const class cv::_InputArray &,const class cv::_OutputArray &,int)'
Unsupported depth of input image:
 'VDepth::contains(depth)'
where
 'depth' is 6 (CV_64F)

Edit2:我发现发生这个错误的原因很简单,因为矩阵在 np.float64 中。但是,将其转换为 np.float32 并不会改变 imshow 结果。

【问题讨论】:

  • 在您的问题中添加您的图像(包括正确版本和 “不开心” 版本)总是值得赞赏的,并且在提出图像处理问题时更有可能产生有用的答案。 .

标签: python opencv opencv3.0


【解决方案1】:

OpenCV 要求图像为 BGR 格式,请尝试应用

converted = cv2.cvtColor(hip_dir,cv2.COLOR_BGR2RGB)

【讨论】:

  • 感谢您的回答,但它会引发错误(在问题中编辑)。
【解决方案2】:

伙计们,我发现了问题所在:在 imshow 命令中显示 RGB 颜色的正确方法是强制图像的对应矩阵为 np.uint8 格式。我测试了其他格式,但没有一个能正常工作。不过我不知道为什么。

【讨论】:

  • 原因是 uint8 图像需要 0..255 的值。浮点类型的图像期望值介于 0 和 1 之间。如果您的浮点图像的值大于 1,则它们都被假定为 1。结果是二进制图像,其中 0 = 黑色,1- 255 = 白色。
猜你喜欢
  • 2020-11-01
  • 1970-01-01
  • 2020-08-04
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 2021-08-21
相关资源
最近更新 更多