Ios 使用OpenCV检测上半身部位
我正在做一个与OpenCV集成的iOS项目。Ios 使用OpenCV检测上半身部位,ios,opencv,detection,Ios,Opencv,Detection,我正在做一个与OpenCV集成的iOS项目。我想要的输出是这样的: 如何检测上半身部位(即:从颈部到腿部)? 到目前为止,我所做的身体检测是这样的。。 如果以前有人做过这个,请帮帮我。。 -(void)processImage:(Mat&)image { std::载体体; matgrayscaleframe; CVT颜色(图像、灰度、CV_bgr2灰色); 均衡器历史(GrayScaleName,GrayScaleName); upperBodyCascade.detectMultiSc
我想要的输出是这样的:
如何检测上半身部位(即:从颈部到腿部)?
到目前为止,我所做的身体检测是这样的。。
如果以前有人做过这个,请帮帮我。。
-(void)processImage:(Mat&)image
{
std::载体体;
matgrayscaleframe;
CVT颜色(图像、灰度、CV_bgr2灰色);
均衡器历史(GrayScaleName,GrayScaleName);
upperBodyCascade.detectMultiScale(灰度值、图像、实体、HaarOptions、cv::Size(30,30));
对于(size_t i=0;i
您可以使用
你可以找到一个例子。您只需要更改加载的分类器
代码如下:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
/** Function Headers */
void detectAndDisplay(Mat frame);
/** Global variables */
String upper_body_cascade_name = "path\\to\\haarcascade_upperbody.xml";
CascadeClassifier upper_body_cascade;
string window_name = "Capture - Upper Body detection";
RNG rng(12345);
/** @function main */
int main(int argc, const char** argv)
{
VideoCapture capture(0);
Mat frame;
//-- 1. Load the cascades
if (!upper_body_cascade.load(upper_body_cascade_name)){ printf("--(!)Error loading\n"); return -1; };
//-- 2. Read the video stream
if (capture.isOpened())
{
while (true)
{
capture >> frame;
//-- 3. Apply the classifier to the frame
if (!frame.empty())
{
detectAndDisplay(frame);
}
else
{
printf(" --(!) No captured frame -- Break!"); break;
}
int c = waitKey(10);
if ((char)c == 'c') { break; }
}
}
return 0;
}
/** @function detectAndDisplay */
void detectAndDisplay(Mat frame)
{
std::vector<Rect> bodies;
Mat frame_gray;
cvtColor(frame, frame_gray, CV_BGR2GRAY);
equalizeHist(frame_gray, frame_gray);
//-- Detect faces
upper_body_cascade.detectMultiScale(frame_gray, bodies, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
for (size_t i = 0; i < bodies.size(); i++)
{
rectangle(frame, bodies[i], Scalar(255, 0, 255));
}
//-- Show what you got
imshow(window_name, frame);
}
#包括
#包括
使用名称空间std;
使用名称空间cv;
/**函数头*/
空隙检测和显示(垫架);
/**全局变量*/
字符串upper\u body\u cascade\u name=“path\\to\\haarcascade\u upper body.xml”;
级联分类器上体级联;
字符串窗口\u name=“捕获-上身检测”;
RNG RNG(12345);
/**@主功能*/
int main(int argc,常量字符**argv)
{
视频捕获(0);
垫架;
//--1.加载叶栅
如果(!upper_body_cascade.load(upper_body_cascade_name)){printf(“-(!)Error load\n”);返回-1;};
//--2.读取视频流
if(capture.isOpened())
{
while(true)
{
捕获>>帧;
//--3.将分类器应用于框架
如果(!frame.empty())
{
检测显示(帧);
}
其他的
{
printf(“-(!)未捕获帧--Break!”);Break;
}
int c=等待键(10);
如果((char)c=='c'){break;}
}
}
返回0;
}
/**@功能检测和显示*/
空隙检测和显示(垫架)
{
std::载体体;
垫子框架为灰色;
CVT颜色(框架、框架灰、CV灰);
均衡器历史(帧灰,帧灰);
//--检测人脸
上半身级联。检测多尺度(帧灰度,身体,1.1,2,0;CV|u HAAR|u尺度图像,大小(30,30));
对于(size_t i=0;i
我用过它。但是这里使用的方法对我不起作用。mat方法中使用的循环需要changed@magid这将起作用(请参阅更新的答案)。如果结果对你不满意,考虑培训你自己的分类器。这里需要更改mat方法中使用的循环非常模糊。你是什么意思?我已经添加了所需的输出,请检查。。现在没有错误,但它正在检测其他对象。。连尸体都没有parts@Miki谢谢你的回答。。在哪里可以获得面部正面和侧面视图的xml
?
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
/** Function Headers */
void detectAndDisplay(Mat frame);
/** Global variables */
String upper_body_cascade_name = "path\\to\\haarcascade_upperbody.xml";
CascadeClassifier upper_body_cascade;
string window_name = "Capture - Upper Body detection";
RNG rng(12345);
/** @function main */
int main(int argc, const char** argv)
{
VideoCapture capture(0);
Mat frame;
//-- 1. Load the cascades
if (!upper_body_cascade.load(upper_body_cascade_name)){ printf("--(!)Error loading\n"); return -1; };
//-- 2. Read the video stream
if (capture.isOpened())
{
while (true)
{
capture >> frame;
//-- 3. Apply the classifier to the frame
if (!frame.empty())
{
detectAndDisplay(frame);
}
else
{
printf(" --(!) No captured frame -- Break!"); break;
}
int c = waitKey(10);
if ((char)c == 'c') { break; }
}
}
return 0;
}
/** @function detectAndDisplay */
void detectAndDisplay(Mat frame)
{
std::vector<Rect> bodies;
Mat frame_gray;
cvtColor(frame, frame_gray, CV_BGR2GRAY);
equalizeHist(frame_gray, frame_gray);
//-- Detect faces
upper_body_cascade.detectMultiScale(frame_gray, bodies, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
for (size_t i = 0; i < bodies.size(); i++)
{
rectangle(frame, bodies[i], Scalar(255, 0, 255));
}
//-- Show what you got
imshow(window_name, frame);
}