【发布时间】:2018-08-20 09:33:14
【问题描述】:
拜托,我正在尝试检测视频中手指的移动。首先,我想应用肤色检测来将手与背景分开,然后我会找到手计数器,然后计算凸点来检测手指。我现在想要从这个视频中得到一个新视频,只显示两个敲击手指的运动(或它们的轮廓),如图所示。
我用这段代码检测肤色:
function OutImg=Skin_Detect(I)
% clear
% I=imread('D:\New Project\Movie Frames from RLC_L_FTM_IP60\Frame
0002.png');
I=double(I);
[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 138<=cr(i,j) && cr(i,j)<=169 && 136<=cb(i,j) && cb(i,j)<=200 &&
0.01<=hue(i,j) && hue(i,j)<=0.2
segment(i,j)=1;
else
segment(i,j)=0;
end
end
end
% imshow(segment);
OutImg(:,:,1)=I(:,:,1).*segment;
OutImg(:,:,2)=I(:,:,2).*segment;
OutImg(:,:,3)=I(:,:,3).*segment;
% figure,imshow(uint8(im));
当我将相同的代码应用到图像时,它运行良好,但当我将它应用到视频时,我什么也没检测到,如下所示:
videoFReader = vision.VideoFileReader('RLC_L_FT_IP60.m4v');
% Create a video player object for displaying video frames.
videoPlayer = vision.DeployableVideoPlayer;
% Display the original video
while ~isDone(videoFReader)
videoFrame = step(videoFReader);
% Track using the Hue channel data
Out=Skin_Detect(videoFrame);
step(videoPlayer,Out);
end
请问有什么解决这个问题的建议和想法吗?
如果有人能提供帮助,即使使用不同的代码,我将不胜感激。 提前谢谢你。
【问题讨论】:
标签: matlab opencv image-processing computer-vision image-segmentation