【发布时间】:2017-09-08 22:27:58
【问题描述】:
我正在尝试创建一个包含视频每一帧的平均颜色的图表。然后我想将它们拼接在一起以创建色谱。
首先,我加载视频并逐帧计算平均颜色,然后将所有三个 RGB 值存储在三个向量中,最终创建合成图像。
v = VideoReader('video.mkv');
numFrames = ceil(v.FrameRate*v.Duration);
% R G B Color channels
stockRed = zeros(1,numFrames+1);
stockGreen = zeros(1,numFrames+1);
stockBlue = zeros(1,numFrames+1);
it = 1;
while hasFrame(v)
video = readFrame(v);
redChannel = video(:, :, 1);
greenChannel = video(:, :, 2);
blueChannel = video(:, :, 3);
%% RGB average
redMean = mean2(redChannel);
stockRed(1,it) = redMean;
greenMean = mean2(greenChannel);
stockGreen(1,it) = greenMean;
blueMean = mean2(blueChannel);
stockBlue(1,it) = blueMean;
it = it + 1;
end
%% Creating image
synthesis = cat(3,stockRed,stockGreen,stockBlue);
imsave(synthesis,'synthesis.png')
问题在于,即使我的合成矩阵似乎包含正确的值,synthesis.png 也是黑白的,似乎不能很好地代表视频。
有什么帮助?
【问题讨论】:
-
将
video转换为double类以使其与其余变量一致,即将行video=readFrame(v);替换为video=im2double(readFrame(v));
标签: image matlab image-processing video frame