Форум сайта python.su
ХЕЛБ!!! Помогите! Ниже приведен код для определения движения объектов с помощью cv2.findContours, необходимо, что бы поиск контуров осуществлялся внутри ограниченной прямоугольником области (ROI), а не на всем кадре. Как модифицировать код для осуществления задуманного?
Код:
import cv2
import numpy as np
def main():
cap=cv2.VideoCapture(0)
if cap.isOpened():
ret,frame = cap.read()
else:
ret =False
ret,frame1 = cap.read()
ret,frame2 = cap.read()
while ret:
upper_left = (50, 50)
bottom_right = (300, 300)
ret,frame = cap.read()
d=cv2.absdiff(frame1,frame2)
grey=cv2.cvtColor(d,cv2.COLOR_BGR2GRAY)
blur =cv2.GaussianBlur(grey,(5,5),0)
ret,th=cv2.threshold(blur,20,255,cv2.THRESH_BINARY)
dilated=cv2.dilate(th,np.ones((3,3),np.uint8),iterations=3)
c,h=cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(frame1,c,-1,(0,255,0),2)
cv2.imshow(“inter”,frame1)
if cv2.waitKey(40) == 27:
break
frame1 = frame2
ret,frame2= cap.read()
cv2.destroyAllWindows()
cap.release()
main()
Спасибо за помощь!
Офлайн
я так понимаю что захват всего кадра происходит вот тут:
ret, frameN = cap.read(), в ret у нас True или False, а в frameN собственно картинка, которую потом распознает cv2. Следовательно вам нужно после cap.read() обрезать ваш frameN как вам нужно, оставив только прямоугольник ROI
Судя по документации VideoCapture object не умеет захватывать только кусок картинки.
[code python][/code]
Отредактировано PEHDOM (Фев. 27, 2019 10:29:07)
Офлайн