我已经尝试了matlab CascadeObjectDetector,通过输入负片和正片图像,但它不能完成这项工作。我想检测人类站在图片中是否赤脚。物体探测器应检测裸脚。在负像中,我只给了鞋子图像。如果我能以某种方式在opencv中这样做,请分享这种技术。
feet images文件夹包含labeledSession.mat,其中包含ROI(感兴趣区域)的信息
positiveInstances = labelingSession.ImageSet.ROIBoundingBoxes(1,:);
%Add the image directory to the MATLAB path.
imDir = fullfile(matlabroot,'toolbox','vision','visiondata',...
'feet');
addpath(imDir);
%Specify the foler for negative images.
negativeFolder = fullfile(matlabroot,'toolbox','vision','visiondata',...
'nonfeet');
%Create an imageDatastore object containing negative images.
negativeImages = imageDatastore(negativeFolder);
%Train a cascade object detector called 'stopSignDetector.xml' using HOG features. NOTE: The command can take several minutes to run.
trainCascadeObjectDetector('shoeDetector.xml',positiveInstances, ...
negativeFolder,'FalseAlarmRate',0.1,'NumCascadeStages',5);
答案 0 :(得分:0)
如果您只对提取足部图像感兴趣,那么基于HSV的皮肤检测,然后重复扩张应该会产生更好的效果。请参阅以下代码:
#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<stdio.h>
using namespace std;
using namespace cv;
int main()
{
Mat f=imread("f2.png");//positive
Mat hsv_th;
cvtColor(f,f,CV_BGR2HSV);
inRange(f,Scalar(0,100,0),Scalar(100,255,100),hsv_th);
dilate(hsv_th,hsv_th,cv::Mat());
dilate(hsv_th,hsv_th,cv::Mat());
dilate(hsv_th,hsv_th,cv::Mat());
dilate(hsv_th,hsv_th,cv::Mat());
for(;;)
{
imshow("fore",f);
imshow("hsv",hsv_th);
char c=waitKey(10);
if(c=='b')//break when 'b' is pressed
{
break;
}
}
return 0;
}
答案 1 :(得分:0)
如果您打算将脚部检测用作工具(即,您可以使用第三方库),那么可以看一下OpenPose,其中包括用于检测大脚趾,小脚趾,脚跟和脚踝的关键点每个人在现场的脚。链接:
https://github.com/CMU-Perceptual-Computing-Lab/openpose
我的猜测是,您可以直接在例如SIFT / SURF功能已应用于每个关键点。