python: глубина изображения OpenCV не поддерживается (CV_64F) - PullRequest
0 голосов
/ 12 марта 2019

Итак, я пытаюсь показать двоичную картинку только с черным и белым, используя этот код:

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

1 Ответ

2 голосов
/ 12 марта 2019

попробуй cv2.imshow("", y.astype('float32')) или cv2.imshow("", y.astype('uint8') * 255)

CV_64F означает, что числовой массив 'dtype' является 64-битной плавающей точкой opencv работает только с 'float32' (32-битной плавающей точкой), где диапазон изображений для imshow составляет 0,0-1,0 или 'uint8' (8-битный без знака) 0-255

Поскольку у был бул, преобразование в число означает преобразование Истина в 1

для float32, это нормально, потому что 1 - максимум для диапазона imshow

если вы используете uint8, это означает, что вы пытаетесь отобразить пиксели со значением 1/255, которые будут едва различимы, поэтому вы можете умножить их на 255, чтобы довести эти пиксели до максимума и отобразить их в виде ярких белых пикселей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...