python: OpenCV depth of image unsupported (CV_64F)

匿名 (未验证) 提交于 2019-12-03 01:46:01

问题:

So, I'm trying to show a binary picture with only black and white using this code:

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() 

But I'm getting this error:

>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). 

回答1:

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

CV_64F means the numpy array 'dtype' is 64bit floating-point opencv only works with 'float32' (32-bit floating point) where image range for imshow is 0.0-1.0 or 'uint8' (unsigned 8-bit) 0-255

Since y was a bool, converting to a number means converting True to 1

for float32, that is fine because 1 is max for imshow range

if you use uint8, that means your trying to display pixels of value 1/255 which will be barely visible, so you can multiply by 255 to bring those pixels to max and appear as bright white pixels



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!