【问题标题】:in function 'inRange' (-215:Assertion failed) ! _src.empty()在函数“inRange”中(-215:断言失败)! _src.empty()
【发布时间】:2020-08-08 13:56:00
【问题描述】:

我目前正在使用 openCV 进行一个小项目,我收到以下 错误 消息:

Traceback (most recent call last):
  File "main.py", line 115, in <module>
    value = cv2.inRange(roi, (0,0,0), (255, 255, 75)) 
cv2.error: OpenCV(4.1.2) /root/opencv/opencv-4.1.2/modules/core/src/arithm.cpp:1726: error: (-215:Assertion failed) ! _src.empty() in function 'inRange'

我已经在 Internet 上进行了一些研究,但还没有找到适合我的解决方案。当我更改感兴趣区域的坐标(短 roi)时,总是会出现错误。

代码(至少是最重要的部分):

roi= (50, 270, 150, 192)

for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):  

    image = frame.array 
    cut = image[roi[0]:roi[1]][roi[2]:roi[3]]
    value = cv2.inRange(cut, (0,0,0), (255, 255, 75))
    rawCapture.truncate(0)

【问题讨论】:

    标签: python opencv raspberry-pi


    【解决方案1】:

    确保您以正确的顺序切割轴,因为 frame.array 返回一个形状为 (y,x,3) 的 numpy 数组。

    调用flush()后,该属性包含帧的数据为多维numpy array。这通常使用维度(行、列、平面)进行组织。因此,一个尺寸为 x 和 y 的 RGB 图像将产生一个形状为 (y, x, 3) 的数组。 确保您的轴切片顺序正确

    #RGB Image 640x480
    img = np.ones((480,640,3))
    
    roi= (500, 600, 150, 192)
    
    cut = img[roi[0]:roi[1]][roi[2]:roi[3]]
    value = cv2.inRange(cut, (0,0,0), (255, 255, 75))
    
    #error: (-215:Assertion failed) ! _src.empty() in function 'cv::inRange'
    

    【讨论】:

    • 所以只是行和列的顺序错误?那么 roi= (150, 192, 50, 270) 是否正确?
    • 根据显示的错误似乎如此。您可以通过 image.shape 确定数组的顺序和大小。
    • 好的,谢谢你的提示,如果有帮助的话,我的分辨率是 320、192。但我也会试试你的命令
    • 编辑:image.shapes 输出 192、320、3。但是我现在必须在我的程序中更改什么?自从我在树莓派上运行 picamera 后,你有任何使用经验吗?
    • 我在一些项目中大部分时间都使用 picamera 和 opencv 库来检测和计数对象。如果这些值是image.shape 返回的值,它们似乎与使用的 roi 不一致,50: 270,y 范围为0:191,但仅此一项不会导致所示问题。但是,如果你的roi是动态变化的,你必须保证切片的起点在图片区域内。
    【解决方案2】:

    我终于找到了解决方案:问题归结为一个简单的语法错误:

    应该是

    cut = image[roi[0]:roi[1], roi[2]:roi[3]]
    

    而不是

    cut = image[roi[0]:roi[1]][roi[2]:roi[3]]
    

    https://www.w3schools.com/python/numpy/numpy_array_slicing.asp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-29
      • 2021-12-19
      • 2022-01-10
      • 2021-08-08
      • 2021-11-28
      • 1970-01-01
      • 2021-06-27
      相关资源
      最近更新 更多