![](/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.