Вывод Canny edge поврежден

Я применяю детектор краев Canny в видео, используя OpenCV. Я вижу результат в окне, а затем пишу видео. Несмотря на то, что я вижу правильный результат в окне, результат в выходном файле отличается.

Вот код и то, что я вижу в окне и в выходном файле. Любая идея, что может вызвать это? Я не уверен, что выводит Canny, и нужно ли мне преобразовать его в тип данных, который будет соответствовать остальной части видео.

        `

    import cv2
    import numpy as np


    cap = cv2.VideoCapture('New_video.mp4')
    if (cap.isOpened() == False):
     print("Unable to read camera feed")

     frame_width = int(cap.get(3))
     frame_height = int(cap.get(4))
     fps = int(round(cap.get(5)))
     out = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, 
   (frame_width, frame_height))

    while (True):
    ret, frame = cap.read()
    if ret == False:
    break 
         if between (cap,40000,45000):
           gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
           frame = cv2.blur(gray,(5,5))
           frame = cv2.Canny(frame,20,60)   
         if between (cap,45000,50000):
          gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
          frame = cv2.blur(gray,(5,5))
          frame = cv2.Canny(frame,150,250)` 
       out.write(frame)    
       cv2.imshow('frame',frame)

person Alice    schedule 16.03.2021    source источник
comment
Где вы пишете свой вывод и где вы просматриваете окно? Пожалуйста, покажите полный код для этого.   -  person fmw42    schedule 16.03.2021
comment
Я обновил код, чтобы показать окно imshow и вывод   -  person Alice    schedule 16.03.2021


Ответы (1)


Попробуйте использовать кодек XVID fourcc вместо mp4v. Кроме того, метод VideoWriter имеет еще один параметр isColor, который по умолчанию имеет значение true. Он должен быть установлен на False всякий раз, когда мы используем изображения в градациях серого.

https://docs.opencv.org/3.4/dd/d9e/classcv_1_1VideoWriter.html

person Faruk    schedule 16.03.2021