OpenCV错误:(-215:断言失败)VScn ::包含(scn)&& VDcn ::包含(dcn)&& VDepth ::包含(depth)在函数'CvtHelper'中。

16
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上是相关的。

问题来自:llSourcell/Object_Detection_demo_LIVE


1
赞扬你的提问和回答,为SO社区做出贡献! - hongsy
4个回答

20

我曾经也遇到过这个问题,解决方法很简单。记住一件事,如果你的图像的RGB值在0-255范围内,请确保这些值不是'float'数据类型。因为OpenCV只有在值在0-1范围内时才考虑float。如果它找到一个大于1的浮点值,它会将其裁剪掉,认为浮点仅存在于0-1之间。因此会产生这样的错误。所以,如果值在0-255之间,将数据类型转换为uint8。

image = image.astype('uint8')

查看此Kaggle Kernel以了解更多信息。


3

如果即使应用了上述修复措施后,仍然遇到相同的错误,请检查您的图像深度,即检查图像是灰度还是彩色,因为cv2.COLOR_BGR2GRAY无法转换已经是灰度的图像,因此会引发此错误。


2
这段文字的意思是:作者在进行“极线几何”(请查看以下链接)时遇到了问题,但通过两种方法之一解决了错误:
第一种方法是保留原始颜色: 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 

现在你可以将图像转换为灰度图像。
img1 = cv2.cvtColor(img1,cv2.COLOR_GRAY2BGR)

如果这两种方法对您不起作用,您可能需要检查下面的链接,它们可能会回答您的问题:

https://github.com/aleju/imgaug/issues/157 https://github.com/llSourcell/Object_Detection_demo_LIVE/issues/6

视差几何(Epipolar Geometry)

https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_epipolar_geometry/py_epipolar_geometry.html


1

在使用OpenCV的轨迹条时遇到了相同的错误,但是这种方法解决了它:

img = np.full((512,512,3), 12, np.uint8)

其中img是您的图像


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接