где добавить cv2.resize, чтобы получить соответствующее разрешение?

#python #opencv #resolution

#python #opencv #разрешение

Вопрос:

У меня проблема с моим кодом. Я не знаю, куда я мог бы поместить cv.resize() , чтобы получить разрешение требований. Я хочу изменить это, потому что файл, который я загружаю, имеет разрешение Full HD, и я хочу получить меньшее разрешение. Я буду рад решению и объяснению.

Ниже я показываю свой код:

 import cv2
import numpy as np

cap = cv2.VideoCapture('DJI_0037.MP4')

while cap.isOpened():

    ret, frame = cap.read()

    if ret == True:
        frame_resize = cv2.resize(frame, (640, 480), interpolation=cv2.INTER_CUBIC)
    else:
        break

    ret, frame_resize1 = cap.read(frame_resize)
    ret, frame_resize2 = cap.read(frame_resize)  

    diff = cv2.absdiff(frame_resize1, frame_resize2) 
    gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY) 
    blur = cv2.GaussianBlur(gray, (5, 5), 0)  
    _, thresh = cv2.threshold(blur, 20, 255, cv2.THRESH_BINARY)
    dilated = cv2.dilate(thresh, None, iterations=3)
    contours, _ = cv2.findContours(dilated, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    for contour in contours: 
        (x, y, w, h) = cv2.boundingRect(contour)  
        if cv2.contourArea(contour) < 2000:
            continue
        cv2.rectangle(frame_resize1, (x, y), (x   w, y   h), (0, 255, 0), 2)
        cv2.putText(frame_resize1, "Status: {}".format('Movement'), (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255),3) 



    cv2.imshow("feed", frame_resize1)
    frame_resize1 = frame_resize2
    ret, frame_resize2 = cap.read()

    if cv2.waitKey(40) == 27:
        break

cap.release()
cv2.destroyAllWindows()

  

Комментарии:

1. либо перед absdiff (для обоих фреймов), либо перед imshow. В зависимости от того, что вы хотите сделать (сэкономить время обработки и снизить качество или просто улучшить отображение)

2. Большое вам спасибо за простое и умное объяснение. Теперь это работает очень хорошо