Как улучшить разрешение OpenCV и python VideoWriter?
У меня есть скрипт, который использует OpenCV и python и создает видео (формат avi) из набора png образы.
Разрешение этих изображений хорошее.
Проблема в том, что разрешение полученного видео очень низкое.
Как я могу улучшить разрешение?
Связано ли низкое разрешение с форматом изображений?
Код:
writer = cv2.VideoWriter( "C:Users.../demo3_4.avi", -1, 1, ( width, height ) )
nFrames = 24
for i in range( 1, nFrames ):
img = cv2.imread( os.path.join( str( inf ), "colorraster%d.jpg"%i ) )
writer.write( img )
cv2.destroyAllWindows()
writer.release()
2 ответов:
Согласно документации ,
cv2.VideoWriterимеет параметрfourcc, который определяет кодек , используемый для сжатия кадров. Теперь вы указываете "-1", что означает некоторый кодек по умолчанию. Я бы предложил поэкспериментировать с различными кодек-ками из этого списка и посмотреть, что дает наилучший результат.Update: чтобы перевести кодек в int, документы рекомендуют следующее:
CV_FOURCC('P','I','M','1')Если вы хотите попробовать кодек PIM1.
Как улучшить разрешение?
Генерируйте выходной поток с разумным размером пикселя
frameSizeи не опустошайте качество информации ( вы заявили выше, чтобы иметь во входных данных (в статических пикселях)) с "кумулятивным продуктом" низкого уровня.FPSчастота кадров в секунду и кодек с большими потерями(CV_FOURCC).Синтаксис:
>>> print cv2.VideoWriter.__doc__ VideoWriter( [ filename, fourcc, # <--------- ref. below fps, # 1 fps frameSize[, # 73 * 59 px isColor ] ] ) -> <VideoWriter object> >>> print cv2.cv.FOURCC.__doc__ CV_FOURCC(c1, c2, c3, c4) -> int >>> cv2.cv.FOURCC( *"XVID" ) 1145656920 >>> cv2.cv.FOURCC( *"MJPG" ) 1196444237 >>> cv2.cv.FOURCC( *"X264" ) 875967064 >>> cv2.cv.FOURCC( *"DIB " ) 541215044 >>> cv2.cv.FOURCC( *"WMV1" ) 827739479 >>> cv2.cv.FOURCC( *"WMV2" ) 844516695Дальнейшие показания:
FourCC - это 4-байтовый код, используемый для указания видеокодек. Список доступных кодов можно найти в разделе fourcc.org. Это зависит от платформы. Следующие кодеки работают нормально: В Федоре:
DIVX,XVID,MJPG,X264,WMV1,WMV2. (XVIDпредпочтительнее.MJPGприводит к видео высокого размера.X264дает очень маленький размер видео ) В окнах:DIVX( еще предстоит проверить и добавить)Код FourCC передается как
cv2.VideoWriter_fourcc('M','J','P','G')илиcv2.VideoWriter_fourcc(*'MJPG)дляMJPG.""" # >>> http://docs.opencv.org/master/dd/d43/tutorial_py_video_display.html#gsc.tab=0 fourcc = cv2.cv.FOURCC( *"DIB " ) video = cv2.VideoWriter( 'ATC_LKPR_output.avi', fourcc, 30, size ) # fps = 30, size = ( 1024, 512 )
Comments