Filter löschen
Filter löschen

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

23 Ansichten (letzte 30 Tage)
Chikako Kuriyama
Chikako Kuriyama am 20 Nov. 2017
Kommentiert: Kei Otsuka am 21 Nov. 2017
動画をグレースケールに変更して再生したいのですがやり方が分かりません。お願いします。
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);

Antworten (1)

Kei Otsuka
Kei Otsuka am 21 Nov. 2017
ループ文の中でグレースケールに変更するところまでは既にできているようなので、 あとは可視化してあげれば完成です。imshowでも良いですし、ビデオプレーヤーオブジェクトを使用しても可視化できます。
v = VideoReader('IMG_2017.2.mp4');
p = vision.VideoPlayer;
while hasFrame(v)
vidFrame = readFrame(v);
gray = rgb2gray(vidFrame);
p(gray)
end
製品のドキュメントにも詳しく書かれていますので、参考にしてみてください。 製品ドキュメント:ファイルの読み取りと書き込みについて
  2 Kommentare
Chikako Kuriyama
Chikako Kuriyama am 21 Nov. 2017
Bearbeitet: Chikako Kuriyama am 21 Nov. 2017
for文で作成したいのですがその場合はどのようにすればよいですか。 グレースケール変更するとともに動画をトリミングして処理する範囲を切り出したいのですがimclopではエラーがでます。よろしければそちらも教えてください。
Kei Otsuka
Kei Otsuka am 21 Nov. 2017
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利用時のエラーは、どのような使い方をしているかわからないので コメントが難しいです。 少なくともエラーメッセージを添付するか、現在試されているスクリプトを添付しないと 良い回答は得られないですよ。

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!