【问题标题】:How to define top and left points from a cropped numpy rectangle?如何从裁剪的 numpy 矩形中定义顶部和左侧点?
【发布时间】:2019-08-11 20:12:23
【问题描述】:

美好的一天,在下面的代码中,我可以从第一帧裁剪一个矩形 ROI。 此 while 循环的最终结果提供了一个 ROI,该 ROI 存储为名为“monitor_region”的 numpy 数组。

video = cv2.VideoCapture("Rob.mp4")       
ret, frame = video.read()
roi_status = False

while(roi_status == False):
    roi = cv2.selectROI("Region Selection by ROI", frame, False)
    if(not all(roi)):
        print("Undefined monitor region.")
        continue
    monitor_region = frame[int(roi[1]):int(roi[1]+roi[3]),int(roi[0]):int(roi[0]+roi[2])]
    cv2.imshow("Selected Region", monitor_region)
    if(cv2.waitKey(0) & 0xFF == 8): #backspace to save
        print("Monitor region has been saved.")
        roi_status = True
cv2.destroyAllWindows()

因为这个“monitor_region”是整个帧的一部分,也是一个矩形。因此,我正在寻找一种可行的解决方案来定义其左点和顶点,以便定义检查范围(如图所示)。在下面的代码中,我可以定义 roi 的宽度和高度。

monitor_width = monitor_region.shape[1]
monitor_height = monitor_region.shape[0]

但是,我仍然缺乏左和高点。一旦我获得了 ROI 的顶部和左侧点。我可以执行如下的 x 和 y 点检查,我用它来确定对象是否存在于 ROI 中。

if((monitor_left < Point_x < (monitor_left + monitor_width)) and (monitor_top < Point_y < (monitor_top + monitor_height))):

【问题讨论】:

    标签: python numpy opencv rectangles


    【解决方案1】:

    selectROI 返回一个包含您所寻找的值的元组:所选 ROI 的左边界、上边界、宽度和高度。

    如果你print(roi),你会得到类似(100,150,300,200)的东西

    你可以像这样解压这些值:

    x,y,width,height = roi
    

    x 是左边界,y 是上边界。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 2013-02-26
      • 2016-12-03
      • 1970-01-01
      相关资源
      最近更新 更多