動画をグレースケールに変更するやり方

조회 수: 14 (최근 30일)
Chikako Kuriyama
Chikako Kuriyama 2017년 11월 20일
댓글: Kei Otsuka 2017년 11월 21일
動画をグレースケールに変更して再生したいのですがやり方が分かりません。お願いします。
I = VideoReader('IMG_2017.2.mp4')
get(I)
implay('IMG_2017.2.mp4');
nframes = I.NumberOfFrames;
R = read(I, 1);
Z = zeros([size(R,1) size(R,2) 3 nframes], class(R));
for k = 1 : nframes
SF = read(I, k);
RG = rgb2gray(SF);
end
implay(RG);

답변 (1개)

Kei Otsuka
Kei Otsuka 2017년 11월 21일
ループ文の中でグレースケールに変更するところまでは既にできているようなので、 あとは可視化してあげれば完成です。imshowでも良いですし、ビデオプレーヤーオブジェクトを使用しても可視化できます。
v = VideoReader('IMG_2017.2.mp4');
p = vision.VideoPlayer;
while hasFrame(v)
vidFrame = readFrame(v);
gray = rgb2gray(vidFrame);
p(gray)
end
製品のドキュメントにも詳しく書かれていますので、参考にしてみてください。 製品ドキュメント:ファイルの読み取りと書き込みについて
  댓글 수: 2
Chikako Kuriyama
Chikako Kuriyama 2017년 11월 21일
편집: Chikako Kuriyama 2017년 11월 21일
for文で作成したいのですがその場合はどのようにすればよいですか。 グレースケール変更するとともに動画をトリミングして処理する範囲を切り出したいのですがimclopではエラーがでます。よろしければそちらも教えてください。
Kei Otsuka
Kei Otsuka 2017년 11월 21일
for文にしたい理由はインデックスを使いたいということでしょうか。
v = VideoReader('ecolicells.avi');
p = vision.VideoPlayer;
nframe = round(v.Duration*v.FrameRate);
for i = 1:nframe
vidFrame = readFrame(v);
gray = rgb2gray(vidFrame);
p(gray)
end
のように使うか、while文のままでもインデックスを表す変数を作れば使えると思います。
v = VideoReader('IMG_2017.2.mp4');
p = vision.VideoPlayer;
idx = 1;
while hasFrame(v)
vidFrame = readFrame(v);
gray = rgb2gray(vidFrame);
p(gray)
idx = idx + 1;
end
imcrop利用時のエラーは、どのような使い方をしているかわからないので コメントが難しいです。 少なくともエラーメッセージを添付するか、現在試されているスクリプトを添付しないと 良い回答は得られないですよ。

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!