【问题标题】:How to save the region of interest of a frame using openCV?如何使用openCV保存帧的感兴趣区域?
【发布时间】:2020-01-06 01:08:35
【问题描述】:

我正在创建一个能够识别手势的深度学习程序。我已经完成了模型的训练,现在我需要在实时视频中使用它。 所以我正在尝试创建一个 openCV 程序,用户将他/她的手放在框架中的感兴趣区域(一个框)中,并且 ROI 将被馈送到我的 CNN 模型。根据我的 CNN 模型将回复的手势。

在我设法创建一个 300x300 的正方形(我的 ROI)的地方编写了这段代码,但是我如何使用该感兴趣区域将其提供给我的 CNN 模型? 我只想将那个正方形部分作为模型的输入。

import traceback
import cv2
import numpy as np
import math

cam = cv2.VideoCapture(0)

while(1):
    try:
        ret, frame = cam.read()
        frame = cv2.flip(frame,1)
        cv2.rectangle(frame,(200,100),(500,400),(0,255,0),2) 
        cv2.imshow('curFrame',frame)


        if cv2.waitKey(1) & 0xFF == ord('q'):
            break



    except Exception:
        traceback.print_exc()
        pass        

cam.release()
cv2.destroyAllWindows()

** 附加

ROI = frame[100:200 , 100:200]

那条线是什么意思?

【问题讨论】:

  • 永远不要在通用 except 子句中使用 pass。使用 Python 的 OpenCV 中的图像存储为 numpy 数组。请参阅有关索引的 numpy 文档以了解如何从数组中获取区域:docs.scipy.org/doc/numpy/reference/arrays.indexing.html
  • frame[100:200 , 100:200] 表示您希望在从 (100,100) 到 (200,200) 的 frame 中分开。是 y,x,比如frame[y1:y2, x1:x2]

标签: python opencv image-processing


【解决方案1】:

实际上,从帧创建 ROI 非常简单,基本上你已经在最后写了它 (ROI = frame[100:200 , 100:200])。

让我们假设在您执行上述代码后,这是您的投资回报率(图片来自internet):

现在,如果您想将 ROI 内的内容作为另一张图像,您可以使用:

ROI = frame[100:400, 200:500] # according to the coordinates of your rectangle

但是,这也会导致矩形在图像中可见(见下图),因此您需要从原始图像实际创建一个副本。

这是没有复制原件的样子:

另外,一些算法behave kind of weird 使用这个 numpy 切片视图,所以最好做一个副本。代码最终应该是这样的:

import cv2
import numpy as np

cam = cv2.VideoCapture(0)

if not cam.isOpened():
  print ("Could not open cam")
  exit()

while(1):
    ret, frame = cam.read()
    if ret:
        frame = cv2.flip(frame,1)
        display = cv2.rectangle(frame.copy(),(200,100),(500,400),(0,255,0),2) 
        cv2.imshow('curFrame',display)
        ROI = frame[100:400, 200:500].copy()
        cv2.imshow('Current Roi', ROI)

    if cv2.waitKey(10) & 0xFF == ord('q'):
        break

cam.release()
cv2.destroyAllWindows()

请注意,我添加了对 cam 的检查是打开的并且 ret.这将告诉您打开网络摄像头是否有任何问题或无法读取图像。

这将是 ROI 中的结果图像:

这可以用cv2.imwrite 保存或传递给您拥有的任何其他算法。如果您有任何问题,请随时提出。

【讨论】:

猜你喜欢
  • 2012-04-25
  • 2013-03-03
  • 1970-01-01
  • 2013-02-28
  • 2017-09-28
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多