0

ビデオの手の肌の色を検出するための出発点として、このコードを使用しています。最初のステップとして、私はそれを実行し、imshow(segment);を使用して結果を表示しました。Matlab で機能します。

ここにコードがあります(オンラインで見つかりました)私は完全には理解していません:

function SkinDetection() 

obj = VideoReader('CloseupHandVid.mp4');
nframes = read(obj, inf);
nframes = get(obj, 'NumberOfFrames');
I = read(obj, 1);   

   for k = 1 : nframes
    singleFrame = read(obj, k);
    Skin(:,:,:,k) = singleFrame;
    whos v
    I=double(singleFrame);
    [hue,s,v]=rgb2hsv(I);
    cb =  0.148* I(:,:,1) - 0.291* I(:,:,2) + 0.439 * I(:,:,3) + 128;
    cr =  0.439 * I(:,:,1) - 0.368 * I(:,:,2) -0.071 * I(:,:,3) + 128;
    [w h]=size(I(:,:,1));

    for i=1:w 
      for j=1:h 
       if  140<=cr(i,j) && cr(i,j)<=165 && 140<=cb(i,j) && cb(i,j)<=195 && 0.01<=hue(i,j) && hue(i,j)<=0.1     
            segment(i,j)=1; 
       else       
            segment(i,j)=0;    
      end    
    end
   end 
   imshow(segment);
   end
end

結果は次のとおりです。 セグメント化されたスキン

私が抱えている問題は、vision.VideoPlayerまたはvision.VideoDeployerのいずれかを使用してバイナリ画像をビデオとして表示する方法がわからないため、このようにオリジナルの横にスキン検出ビデオの結果を表示できることです例:

http://uk.mathworks.com/help/vision/examples/motion-based-multiple-object-tracking.html?searchHighlight=multiple%20motion%20detection

4

1 に答える 1

0

引用した例にはvision.VideoPlayer、元のビデオを表示するためのオブジェクトと、バイナリ イメージを表示するためのオブジェクトの 2 つのオブジェクトがあります。バイナリ イメージをオブジェクトのstepメソッドに入力するだけです。vision.VideoPlayer

于 2016-01-25T17:46:38.333 に答える