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

时间:2014-03-10 17:04:11

标签: matlab image-processing video-processing

我正在尝试在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

任何修复这两个问题的指针?

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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);

答案 2 :(得分: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);
相关问题