【问题标题】:python: OpenCV depth of image unsupported (CV_64F)python:不支持图像的OpenCV深度(CV_64F)
【发布时间】:2019-08-03 07:59:36
【问题描述】:

所以,我正在尝试使用以下代码显示只有黑白的二进制图片:

import cv2
import numpy as np

x_img = cv2.imread("lenac.tif")

x_img_g = cv2.cvtColor(x_img, cv2.COLOR_BGR2GRAY)

y = x_img_g > 128

cv2.imshow("", y*1.0)
cv2.waitKey(0)
cv2.destroyAllWindows()

但是我收到了这个错误:

>Traceback (most recent call last):
File "ex5.py", line 11, in <module>
cv2.imshow("", y*1.0)
cv2.error: OpenCV(4.0.0) c:\projects\opencv- 
python\opencv\modules\imgproc\src\color.hpp:261: error: (-2:Unspecified 
error) >in function '__cdecl cv::CvtHelper<struct 
cv::Set<1,-1,-1>,struct cv::Set<3,4,-1>,struct 
cv::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).

【问题讨论】:

    标签: python numpy opencv


    【解决方案1】:

    试试cv2.imshow("", y.astype('float32'))cv2.imshow("", y.astype('uint8') * 255)

    CV_64F 表示 numpy 数组 'dtype' 是 64 位浮点数 opencv 仅适用于“float32”(32 位浮点),其中 imshow 的图像范围为 0.0-1.0 或“uint8”(无符号 8 位)0-255

    由于 y 是布尔型,转换为数字意味着将 True 转换为 1

    对于 float32,这很好,因为 imshow 范围的最大值为 1

    如果您使用 uint8,这意味着您尝试显示值 1/255 的像素,这些像素几乎不可见,因此您可以乘以 255 以使这些像素达到最大值并显示为亮白色像素

    【讨论】:

    • 嘿!第一个不起作用,但第二个起作用了。谢谢!
    • 如果你想保持范围-1,+1怎么办?
    • @JürgenK。除了 float32 [0.0-1.0] 或 uint8 [0-255] 之外,您不能使用 cv2.imshow()。您需要通过 y_copy=((y+1)*255/2).astype('uint8') 更改范围 [0-255] 并使用 y_copy 进行 imshow()
    猜你喜欢
    • 2019-08-06
    • 2021-07-28
    • 2021-11-24
    • 2015-02-27
    • 2020-05-05
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多