无视频输出 OpenCV Python
No video output OpenCV Python
我正在尝试将适用于图像的代码转换为视频。我的程序接收图像,计算出每个 9*9 window 的平均 RGB 并输出图像:
输入图像:
输出图像:
这是我的代码,图像为 input/output:
import numpy as np
import cv2
#Read in image
img = cv2.imread('images/0021.jpg')
scale = 9
#Get x and y components of image
y_len,x_len,_ = img.shape
mean_values = []
for y in range(scale):
for x in range(scale):
#Crop image 3*3 windows
cropped_img=img[(y*y_len)/scale:((y+1)*y_len)/scale,
(x*x_len)/scale:((x+1)*x_len)/scale]
mean_val=cv2.mean(cropped_img)
mean_val=mean_val[:3]
cropped_img[:,:,:] = mean_val
print img.shape
cv2.imshow('mean_RGB',img)
cv2.waitKey(0)
当尝试在视频上使用相同的代码时,我得到了一个视频输出,但它是空的(0 字节)。
代码如下:
import numpy as np
import cv2
cap = cv2.VideoCapture('videos/kondo2.avi')
fourcc = cv2.cv.CV_FOURCC(*'DIVX')
out = cv2.VideoWriter('videos/output.avi',fourcc, 15.0, (800,600),True)
while(cap.isOpened()):
ret, frame = cap.read()
if ret == True:
y_len,x_len,_ = frame.shape
scale = 9
for y in range(scale):
for x in range(scale):
cropped_frame=frame[(y*y_len)/scale:((y+1)*y_len)/scale,
(x*x_len)/scale:((x+1)*x_len)/scale]
mean_val=cv2.mean(cropped_frame)
mean_val=mean_val[:3]
cropped_frame[:,:,:] = mean_val
out.write(frame)
cap.release()
out.release()
cv2.destroyAllWindows()
感谢您的阅读:)
我试过你的代码。我必须更改的三件事:
- 输出视频的编解码器。我将其更改为 mp4 并且有效。
- 行的缩进out.write(frame)。
- 调整输入框的大小,以确保其大小正确。
以下是适合我的方法:
import numpy as np
import cv2
cap = cv2.VideoCapture('videos/kondo2.avi')
w=800
h=600
fourcc = cv2.cv.CV_FOURCC('m', 'p', '4', 'v')
out = cv2.VideoWriter('videos/output.avi',fourcc, 25, (w,h),True)
count = 0
while(cap.isOpened()):
count = count + 1
print "processing frame ", count
ret, frame = cap.read()
if ret == True:
frame = cv2.resize(frame,(w,h), interpolation = cv2.INTER_CUBIC)
y_len,x_len,_ = frame.shape
scale = 9
for y in range(scale):
for x in range(scale):
cropped_frame=frame[(y*y_len)/scale:((y+1)*y_len)/scale,
(x*x_len)/scale:((x+1)*x_len)/scale]
mean_val=cv2.mean(cropped_frame)
mean_val=mean_val[:3]
cropped_frame[:,:,:] = mean_val
out.write(frame)
cap.release()
out.release()
cv2.destroyAllWindows()
我正在尝试将适用于图像的代码转换为视频。我的程序接收图像,计算出每个 9*9 window 的平均 RGB 并输出图像:
输入图像:
输出图像:
这是我的代码,图像为 input/output:
import numpy as np
import cv2
#Read in image
img = cv2.imread('images/0021.jpg')
scale = 9
#Get x and y components of image
y_len,x_len,_ = img.shape
mean_values = []
for y in range(scale):
for x in range(scale):
#Crop image 3*3 windows
cropped_img=img[(y*y_len)/scale:((y+1)*y_len)/scale,
(x*x_len)/scale:((x+1)*x_len)/scale]
mean_val=cv2.mean(cropped_img)
mean_val=mean_val[:3]
cropped_img[:,:,:] = mean_val
print img.shape
cv2.imshow('mean_RGB',img)
cv2.waitKey(0)
当尝试在视频上使用相同的代码时,我得到了一个视频输出,但它是空的(0 字节)。
代码如下:
import numpy as np
import cv2
cap = cv2.VideoCapture('videos/kondo2.avi')
fourcc = cv2.cv.CV_FOURCC(*'DIVX')
out = cv2.VideoWriter('videos/output.avi',fourcc, 15.0, (800,600),True)
while(cap.isOpened()):
ret, frame = cap.read()
if ret == True:
y_len,x_len,_ = frame.shape
scale = 9
for y in range(scale):
for x in range(scale):
cropped_frame=frame[(y*y_len)/scale:((y+1)*y_len)/scale,
(x*x_len)/scale:((x+1)*x_len)/scale]
mean_val=cv2.mean(cropped_frame)
mean_val=mean_val[:3]
cropped_frame[:,:,:] = mean_val
out.write(frame)
cap.release()
out.release()
cv2.destroyAllWindows()
感谢您的阅读:)
我试过你的代码。我必须更改的三件事:
- 输出视频的编解码器。我将其更改为 mp4 并且有效。
- 行的缩进out.write(frame)。
- 调整输入框的大小,以确保其大小正确。
以下是适合我的方法:
import numpy as np
import cv2
cap = cv2.VideoCapture('videos/kondo2.avi')
w=800
h=600
fourcc = cv2.cv.CV_FOURCC('m', 'p', '4', 'v')
out = cv2.VideoWriter('videos/output.avi',fourcc, 25, (w,h),True)
count = 0
while(cap.isOpened()):
count = count + 1
print "processing frame ", count
ret, frame = cap.read()
if ret == True:
frame = cv2.resize(frame,(w,h), interpolation = cv2.INTER_CUBIC)
y_len,x_len,_ = frame.shape
scale = 9
for y in range(scale):
for x in range(scale):
cropped_frame=frame[(y*y_len)/scale:((y+1)*y_len)/scale,
(x*x_len)/scale:((x+1)*x_len)/scale]
mean_val=cv2.mean(cropped_frame)
mean_val=mean_val[:3]
cropped_frame[:,:,:] = mean_val
out.write(frame)
cap.release()
out.release()
cv2.destroyAllWindows()