#opencv
#opencv
Вопрос:
import cv2
import numpy as np
import time
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')
img = np.zeros((640,480))
center_x = 0
center_y = 256
videoFile1 = 'D:/Python/6. Const_Speed/sample1.mp4'
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('SaveVideo2.avi', fourcc, 20.0, (640, 480))
while True:
img = np.zeros((640, 480))
img = cv2.circle(img, (center_x, center_y), 20, 120, -1)
cv2.imshow('img', img)
out.write(img)
center_x = 3
time.sleep(1/30)
if cv2.waitKey(1) amp; 0xFF == ord('q'):
break
out.release()
cv2.destroyAllWindows()
Я хотел бы записать видео круга, движущегося с постоянной скоростью от левой части экрана к правой. Приведенный выше код выполняется без ошибок, но результирующее видео пустое, только с черным экраном.
Что я пробовал
- Я обнаружил, что видео не записывается, если размер отличается. Таким образом, я подобрал размер, равный (640 480).
- Я попытался сменить кодек с XVID на другие кодеки. Наконец, я обнаружил, что кодек ‘XVID’ работает с файлом .avi, поэтому я решил сохранить его.
Комментарии:
1. Почему вы определили
videoFile1
переменную?2. @Ahx Я изменил его, когда отлаживал. первоначально первой переменной VideoWriter был videoFile1.
Ответ №1:
В вашем коде есть три проблемы.
Проблема #1:
- Если вы собираетесь создавать
.avi
, я предлагаю вам использоватьMJPG
.- fourcc = cv2.VideoWriter_fourcc(*’MJPG’)
Проблема #2:
- Вам нужно тщательно определить
VideoWriter
класс- Когда вы определяете размер, он должен быть
frame_width
иframe_height
- Например, если вы хотите создать видео с таким размером
(640, 480)
, вам необходимо инициализироватьVideoWriter
с помощью(480, 640)
-
out = cv2.VideoWriter('SaveVideo2.avi', fourcc, 20.0, (480, 640))
- Кроме того, вы планируете создать видео в сером цвете, поэтому вам необходимо инициализировать
isColor
False
-
out = cv2.VideoWriter('SaveVideo2.avi', fourcc, 20.0, (480, 640), isColor=False)
- Когда вы определяете размер, он должен быть
Выпуск №3:
- Если вы создаете черное изображение, вам необходимо определить его тип:
-
while True: img = np.zeros((640, 480), dtype=np.uint8)
-
Если вы исправите проблемы, результат будет:
Код:
import cv2
import numpy as np
import time
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')
img = np.zeros((640, 480))
center_x = 0
center_y = 256
videoFile1 = 'video.mp4'
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('SaveVideo2.avi', fourcc, 20.0, (480, 640), isColor=False)
while True:
img = np.zeros((640, 480), dtype=np.uint8)
img = cv2.circle(img, (center_x, center_y), 20, 120, -1)
cv2.imshow('img', img)
out.write(img)
center_x = 3
time.sleep(1/30)
if cv2.waitKey(1) amp; 0xFF == ord('q'):
break
out.release()
cv2.destroyAllWindows()