【问题标题】:OpenCV Error: (-215:Assertion failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'CvtHelper'OpenCV 错误:(-215:断言失败)VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'CvtHelper'
【发布时间】:2019-03-15 07:13:57
【问题描述】:
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

【问题讨论】:

  • 感谢提问并回答为 SO 社区做出贡献!

标签: python opencv color-space


【解决方案1】:

即使我遇到了同样的问题,解决方法也很简单。记住一件事,如果图像的 RGB 值在 0-255 范围内,请确保这些值不是数据类型“float”。由于 OpenCV 仅在值范围为 0-1 时才考虑浮点数。如果它发现一个大于 1 的浮点值,它会剪掉认为浮点数只存在于 0-1 之间的值。因此产生了这样的错误。因此,如果值介于 0-255 之间,则将数据类型转换为 uint8。

image = image.astype('uint8')

查看Kaggle Kernel 了解更多信息

【讨论】:

    【解决方案2】:

    以防万一即使在应用上述修复后仍然存在相同的错误,请检查图像的深度,即检查图像是 grayscale 还是 colored,因为 cv2.COLOR_BGR2GRAY 无法转换图像已经grayscale 并因此抛出此错误。

    【讨论】:

      【解决方案3】:

      嗯,我正在做极线几何(找到下面的链接),我遇到了这个问题。我通过以下两种方法之一解决了这个错误:

      第一种方法 - 保持原来的颜色: 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

      对极几何

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

      【讨论】:

        【解决方案4】:

        在 opencv 中使用 trackbar 时出现同样的错误,但是这个方法解决了它:

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

        img 是你的头像

        【讨论】:

          猜你喜欢
          • 2020-10-23
          • 2020-06-16
          • 2020-08-21
          • 2021-09-12
          • 2022-01-10
          • 1970-01-01
          • 2023-03-23
          • 2019-04-15
          相关资源
          最近更新 更多