【问题标题】:Cropping live video feed in OpenCV在 OpenCV 中裁剪实时视频源
【发布时间】:2017-03-10 20:10:24
【问题描述】:

我有一个实时视频源,它跟踪绿色对象并在对象区域上绘制一个矩形。我很好奇我将如何裁剪提要以仅显示矩形包含的区域。

以下是相关部分:

while True: 

    (success, frame) = webcam.read()

    frame = imutils.resize(frame, width = 1000)
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    mask = cv2.inRange(hsv, greenLower, greenUpper)
    mask = cv2.erode(mask, None, iterations=2)
    mask = cv2.dilate(mask, None, iterations=2)

    cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
    center = None

    if len(cnts) > 0:

        c = max(cnts, key=cv2.contourArea)
        ((x, y), radius) = cv2.minEnclosingCircle(c)
        M = cv2.moments(c)
        center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))

    for c in cnts:
        if cv2.contourArea(c) < 500:
            continue

        (x, y, w, h) = cv2.boundingRect(c)
        cv2.rectangle(frame, (x,y), (x+w, y+h), (0, 255, 0), 2)

    pts = deque(maxlen = 32)
    pts.appendleft(center)

    for i in xrange(1, len(pts)):

        if pts[i - 1] is None or pts[i] is None:
            continue

        thickness = int(np.sqrt(args["buffer"] / float(i + 1)) * 2.5)
        cv2.line(frame, pts[i - 1], pts[i], (0, 255, 0), thickness)

    cv2.imshow("Presentation Tracker", frame)

【问题讨论】:

    标签: python opencv opencv3.0 opencv3.1


    【解决方案1】:

    您可能正在寻找的是使用 OpenCV Python 创建一个“感兴趣的区域 (ROI)”。

    您可以在代码中这样做,如下所示:

    (x, y, w, h) = cv2.boundingRect(c)
    cv2.rectangle(frame, (x,y), (x+w, y+h), (0, 255, 0), 2)
    roi = frame[y:y+h, x:x+w]
    

    请注意,(x,y) 对应于矩形的左上角。 上面声明的矩形内的区域已存储在 Mat roi 中。

    【讨论】:

      猜你喜欢
      • 2011-09-06
      • 2019-12-12
      • 2019-12-28
      • 1970-01-01
      • 2019-04-08
      • 2021-08-28
      • 1970-01-01
      • 2016-03-18
      • 2011-09-06
      相关资源
      最近更新 更多