python:不支持 OpenCV 图像深度 (CV_64F)

标签 python numpy opencv

因此,我尝试使用以下代码显示只有黑色和白色的二进制图片:

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

最佳答案

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

CV_64F 表示 numpy 数组 dtypefloat64(64 位 float )。

opencv imshow 仅适用于 float32(32 位浮点),其中像素值的范围是 0.0-1.0uint8 (无符号 8 位),范围为 0-255

由于 y 是一个 bool,将其转换为数字意味着将 True 转换为 1

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

如果您使用 uint8,这意味着您正在尝试显示值 1/255 的像素(因为 uint8 的最大 imshow 范围> 是 255),几乎看不到,因此您可以乘以 255 使这些像素达到最大并显示为亮白色像素

关于python:不支持 OpenCV 图像深度 (CV_64F),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55128386/

相关文章:

python - 在我保存时集中控制导入不同版本的脚本

python - 使用两个 numpy 向量中元素对的函数填充矩阵的最快方法?

python - 使用 NumPy 将用户/项目评分转换为二维数组

python-3.x - 裁剪复数以解决 exp 中的溢出错误

opencv - opencv模板匹配结果

python - 找出最长重复字母的位置

python - 将切线添加到曲线,并将法线添加到切线。 OpenCV Python

Python 子进程 echo 不将带引号的文本传递到文件末尾

ios - 相机参数 - iPhone 7

c++ - OpenCV + OpenGL - 获取 OpenGL 图像作为 OpenCV 相机