【发布时间】:2015-08-15 12:50:56
【问题描述】:
我正在尝试从视频中读取前 20 帧,将这些图像与我通过取这 20 个图像的中值获得的背景图像一起保存在一个文件夹中。然后我试图从视频中的每一帧中减去这个背景图像并将输出写入一个新视频。但最后,我只在新视频中得到黑色输出并得到以下警告: 警告:没有视频帧写入此文件。该文件可能无效。
在 VideoWriter.VideoWriter>VideoWriter.close 在 307 在 VideoWriter.VideoWriter>VideoWriter.delete 在 256 在 43 帧提取中
我该怎么办?
clear all;
clc;
thresh=100;
workingDir = 'D:/DDP/proj3';
mkdir(workingDir)
mkdir(workingDir,'images')
vid= VideoReader('D:/DDP/sample1.3gp');
for k=1:20
img = readFrame(vid);
filename = [sprintf('%01d',k-1) '.jpg'];
imwrite(img,fullfile(workingDir,'images',filename))
end
folder = 'D:\DDP\proj3\images\';
filelist = dir( fullfile(folder,'*.jpg') );
filelist = strcat(folder, filesep, {filelist.name});
images = zeros(720,1280,3, numel(filelist), 'double');
for i=1:numel(filelist)
images(:,:,:,i) = double( imread(filelist{i}) );
end
background = uint8(median(images, 4));
imwrite(background,'D:\DDP\proj3\images\background.jpg','jpg')
fr_size = size(BW1);
width = fr_size(2);
height = fr_size(1);
fg = zeros(height, width);
vid.CurrentTime = 0; % Rewind video reader
VW = VideoWriter('D:/DDP/proj3/new');
open(VW);
while hasFrame(vid)
fr = readFrame(vid);
fr_diff = abs(double(fr) - double(background));
for j=1:width
for k=1:height
if ((fr_diff(k,j) > thresh))
fg(k,j) = 255;
else
fg(k,j) = 0;
end
end
end
writeVideo(VW,double(fg)/255);
end
close(VW)
cc= VideoReader('D:/DDP/proj3/new.avi');
cd= VideoWriter('D:/DDP/proj3/new1');
open(cd);
while hasFrame(cc);
s=readFrame(cc);
J = imnoise(s,'salt & pepper',0.02);
img_filtered = J;
for c = 1 : 3
img_filtered(:, :, c) = medfilt2(J(:, :, c), [3, 3]);
end
writeVideo(cd, double(img_filtered)/255);
end
close(cd);
【问题讨论】:
-
错误到底发生在哪一行?错误中的行号与代码 sn-p 中的行号不对应。只有 37 行,而报告的行错误在第 43 行。请在代码中描述错误发生的位置。
-
在大众 = VideoWriter('D:/DDP/new');您没有指定扩展名,因此您将获得 Motion JPEG AVI。仔细检查 CDatas 是否有数据并且在适当的范围内
-
您永远不会回到视频的开头。第一次调用
hasFrame时,它会检查第 21 帧。视频是否有 21 帧或更多帧? -
视频有 640 帧。但是从第 21 帧开始有关系吗?因为前 20 帧相当于背景图像,所以它们的减法不会给出任何结果。如果我错了,请在这里纠正我,因为我是图像处理方面的新手
-
背景图为double型,frame为int型。所以这可能是它背后的原因。那么如何将 double 转换为 uint 呢?
标签: matlab image-processing computer-vision