[英]Error : Invalid number of channels in input image: 'VScn::contains(scn)' using opencv?
[英]OpenCV Error: (-215:Assertion failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'CvtHelper'
Traceback (most recent call last):
File "demo.py", line 132, in
`result = find_strawberry(image)`
File "demo.py", line 63, in find_strawberry
`image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)`
cv2.error: OpenCV(3.4.2) /Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/color.hpp:253: error: (-215:Assertion failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'CvtHelper'
我个人在这个问题上花了很多时间,因此认为将其发布到 Stackoverflow 上是相关的。
甚至我也有同样的问题,解决方案很简单。 记住一件事,如果图像的 RGB 值在 0-255 的范围内,请确保这些值不是数据类型“float”。 因为 OpenCV 仅在值范围为 0-1 时才考虑浮点数。 如果它发现一个大于 1 的浮点值,它会剪掉该值,认为浮点数只存在于 0-1 之间。 因此产生了这样的错误。 因此,如果值为 0-255,则将数据类型转换为 uint8。
image = image.astype('uint8')
检查此Kaggle 内核以了解更多信息
以防万一即使在应用上述修复程序后仍有人遇到相同的错误,请检查图像的深度,即检查图像是grayscale
还是colored
因为cv2.COLOR_BGR2GRAY
无法转换已经是grayscale
图像,因此会抛出这个错误。
好吧,我正在做对极几何(找到下面的链接),我遇到了这个问题。 我通过执行以下两种方法之一解决了此错误:
第一种方法- 保持原始颜色: A. 我通过从 cv2.imread 中删除零参数来加载具有原始颜色(在我的情况下为 RGB)的图像。
img1 = cv2.imread('image.jpg')
B. 您可能需要编辑图像的形状,因为它是 RGB
r, c,_ = img1.shape
C. 注释转换
# img1 = cv2.cvtColor(img1,cv2.COLOR_GRAY2BGR)
第二种方法- 转换成灰度图像: A. 我通过将零参数添加到 cv2.imread 来加载 BGR 中的图像。
img1 = cv2.imread('image.jpg',0)
B. 您可能需要编辑图像的形状,因为它是 BGR
r, c = img1.shape
C. 现在可以将图像转换为灰度图像
img1 = cv2.cvtColor(img1,cv2.COLOR_GRAY2BGR)
如果这两种方法对您不起作用,您可能需要查看下面的链接,它们可能已经回答了您的问题:
https://github.com/aleju/imgaug/issues/157 https://github.com/llSourcell/Object_Detection_demo_LIVE/issues/6
对极几何
在 opencv 中使用 trackbar 时遇到相同的错误,但此方法解决了它:
img = np.full((512,512,3), 12, np.uint8)
其中img
是您的图像
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.