![](/img/trans.png)
[英]How to determine a region of interest and then crop an image using OpenCV
[英]How to save the region of interest of a frame using openCV?
我正在创建一个能够识别手势的深度学习程序。 我已经完成了模型的训练,现在我需要在实时视频中使用它。 所以我正在尝试创建一个 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]
那条线是什么意思?
从一帧创建一个 ROI 实际上非常简单,基本上你已经在最后写了它( ROI = frame[100:200 , 100:200]
)。
让我们假设这是您在执行上述代码后获得 ROI 的手(图片来自互联网):
现在,如果您想要将 ROI 内的内容作为另一个图像,您可以使用:
ROI = frame[100:400, 200:500] # according to the coordinates of your rectangle
然而,这也会导致图像中的矩形可见(见下图),因此您需要从原始图像实际创建一个副本。
这是没有从原件复制的样子:
此外,一些算法在这个 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
保存或传递给您拥有的任何其他算法。 如果您有任何问题随时问。
导入 cv2 导入 numpy 作为 np
cam = cv2.VideoCapture(0)
如果不是 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()
执行需要多少次?...执行需要很长时间...
它还给出了“无法打开凸轮?...我该如何解决这个问题?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.