在MATLAB中将彩色视频转换为灰度视频

3
我将尝试在MATLAB中进行一些与颜色视频相关的操作,但我遇到了两个问题:
  • 将彩色视频转换为灰度视频时出现错误。我的意思是我需要将彩色视频转换为灰度视频并将其写回到.avi文件中。
  • 如何在从彩色视频提取的灰度帧上执行某些操作(例如边缘检测),然后可以将边缘检测的结果以.avi视频格式写回?
我的不完整代码(由颜色格式转换组成)如下:
vid = VideoReader('Big_buck_bunny_480p_Cut.avi');
numImgs = get(vid, 'NumberOfFrames');
frames = read(vid);
for i=1:numImgs
  frames(:,:,:,i)=rgb2gray(frames(:,:,:,i));
end

有什么方法可以解决这两个问题吗?

1
为什么不使用另一个框架来保存灰度视频,比如 frame1。然后每个 for 循环使用 [writeVideo](http://www.mathworks.com/help/matlab/ref/videowriter.writevideo.html) 来保存 frame1。第二个选项是创建一个灰度帧的数组,并使用 writeVideo 写入。在后者中,您必须创建一个 3-D 数组而不是 4-D。例如,frames1(:,:,i)=rgb2gray(frames(:,:,:,i)); - Autonomous
3个回答

4

您的第一个问题是尝试将rgb2gray的2D输出分配到3D数组中。您可以通过将灰度图像转换回RGB格式来解决此问题:

  frames(:,:,:,i)=repmat(rgb2gray(frames(:,:,:,i)),[1 1 3]);

3
%% convert a RGB video to a grayscale one.
videoFReader = vision.VideoFileReader('xylophone.mpg');
videoFWriter = vision.VideoFileWriter('xylophone_gray.avi',...
   'FrameRate',videoFReader.info.VideoFrameRate);
while ~isDone(videoFReader)
   videoFrame = step(videoFReader);
   step(videoFWriter, rgb2gray(videoFrame));
end
release(videoFReader);
release(videoFWriter);

1
尝试这种方法。这应该解决问题。代码是自解释的。
 vid = VideoReader('xylophone.mpg');
 numImgs = get(vid, 'NumberOfFrames');
 frames = read(vid);
 obj=VideoWriter('somefile.avi');
 open(obj);

 for i=1:numImgs
     movie(i).cdata=rgb2gray(frames(:,:,:,i));
     movie(i).colormap=gray;
 end

 writeVideo(obj,movie);
 close(obj);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接