【问题标题】:TypeError: Expected Ptr<cv::UMat> for argument 'array'类型错误:参数“数组”的预期 Ptr<cv::UMat>
【发布时间】:2020-11-09 12:27:12
【问题描述】:

以下是我编写的代码:执行此代码时出现以下错误- **

x,y,w,h = cv2.boundingRect(contours) TypeError: Expected Ptr<:umat> 对于参数“数组”

我正在尝试在我的轮廓之外制作矩形

**

from cv2 import cv2
import numpy as np

cam = cv2.VideoCapture(0)
kernel_open = np.ones((7,7), np.uint8)
kernel_close = np.ones((15,15), np.uint8)


while True:
    ret, frame = cam.read()

    frame = cv2.resize(frame, (340,220))

    

    # Our image is in BGR format. We need to conver it into HSV
    imgHSV = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # Now we'll apply masking to capture green colour
    lower_lim = np.array([33, 80, 40])
    upper_lim = np.array([102, 255, 255])

    mask = cv2.inRange(imgHSV, lower_lim, upper_lim)

    # As we are getting noises so we'll remove the noise by morphological transformation- Opening and Closing
    mask_open = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel_open)
    mask_close = cv2.morphologyEx(mask_open, cv2.MORPH_CLOSE, kernel_close)

    # Till now we have identified the colour of the image we want
    # Now we'll make boundary or contours around our required colour image
    contours, hierarchy = cv2.findContours(mask_close.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
    cv2.drawContours(frame, contours, -1, (0,0,255), 3)


    # Now we'll draw rectangles
    for i in range(len(contours)):
        x,y,w,h = cv2.boundingRect(contours)
        cv2.rectangle(frame, (x,y), (x+w, y+h), (255,0,0), 3)
        


    cv2.imshow('Original Image', frame)
    cv2.imshow('Mask Closed Image', mask_close)

    if cv2.waitKey(1) == 27:
        break

cam.release()
cv2.destroyAllWindows()

【问题讨论】:

    标签: image opencv computer-vision cv2


    【解决方案1】:

    你可以试试 我们需要让它 mask_close= mask_close[0] 替换你的代码

    contours, hierarchy = cv2.findContours(mask_close.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

    mask_close= mask_close[0] contours, hierarchy = cv2.findContours(mask_close, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

    【讨论】:

      【解决方案2】:

      将您的 mask_close 数组转换为无符号 8 位整数数组 cv2.findContours((mask_close.astype(np.uint8).copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

      【讨论】:

        【解决方案3】:

        换行:

        contours, hierarchy = cv2.findContours(mask_close.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
        

        以下几行:

        contours, hierarchy = cv2.findContours(mask_close.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[-2:]
        

        实际上,在特定版本的 OpenCV 中,cv2.findContours() 函数返回 3 个值而不是 2 个。这三个值依次为:image, contours, hierarchy

        我认为您只是在使用该版本,这就是发生这种情况的原因。

        【讨论】:

          猜你喜欢
          • 2021-08-10
          • 2021-04-30
          • 2020-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多