OpenCV错误 - cv2.cvtcolor

Sha*_*ngh 9 python opencv image-processing

我是openCV的新手,我没有解决这个错误.我正在尝试使用此代码将图像从BGR转换为灰度格式 -

img = cv2.imread('path//to//image//file')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常.我检查了img变量的数据类型,结果是numpy ndarray和shape (100,80,3).但是,如果我给numpy ndarray数据类型的代码中已经存在的图像和与cvtColor函数输入相同的尺寸,它会给我以下错误 -

Error: Assertion failed (depth == 0 || depth == 2 || depth == 5) in cv::cvtColor, file D:\Build\OpenCV\opencv-3.4.1\modules\imgproc\src\color.cpp, line 11109
cv2.error: OpenCV(3.4.1) D:\Build\OpenCV\opencv-3.4.1\modules\imgproc\src\color.cpp:11109: error: (-215) depth == 0 || depth == 2 || depth == 5 in function cv::cvtColor
Run Code Online (Sandbox Code Playgroud)

第二种情况的代码是(在这里制作自定义的np.ndarray) -

img = np.full((100,80,3), 12)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
Run Code Online (Sandbox Code Playgroud)

任何人都可以澄清这个错误的原因是什么以及如何纠正它?

D.G*_*ths 14

这是因为你的numpy数组不是由正确的数据类型组成的.默认情况下会生成一个类型np.int64(64位)的数组,但是cv2.cvtColor()需要8位(np.uint8)或16位(np.uint16).要更正此更改您的np.full()函数以包括数据类型:

img = np.full((100,80,3), 12, np.uint8)


A.A*_*tov 7

使用初始图像作为源来初始化新的 numpy 数组可能更容易dtype=np.uint8

import numpy as np    
img = cv2.imread('path//to//image//file')    
img = np.array(img, dtype=np.uint8)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Run Code Online (Sandbox Code Playgroud)