[ 深度学习 | OpenCV ] OpenCV开发二(物体监测)
程序员文章站
2022-06-23 21:27:05
话不多说先贴代码:HOG+SVM:#include // for standard I/O#include // for strings#include #include // Basic OpenCV structures (cv::Mat)#include ...
话不多说先贴代码:
HOG+SVM:
#include <iostream> // for standard I/O
#include <string> // for strings
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp> // Basic OpenCV structures (cv::Mat)
#include <opencv2/videoio.hpp> // Video write
#include <opencv2/objdetect.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main(int argc,char * argv[]){
VideoCapture inputVideo(0);
HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); //设置SVM人体检测监测模型
vector<Rect> rects;
Mat src,gray;
for (;;)
{
inputVideo >> src;
hog.detectMultiScale(gray, faces, 0, Size(8, 8), Size(32, 32), 1.05, 2);
//src监测画面,rects返回检测到所有的矩形,1.05缩放比例,越接近1越准确,越大检测速度越快,还有其他参数影响不是特别大,自行查找
for (int i = 0;i < rects.size();i++) {
rectangle(src, rects[i], Scalar(0, 255, 0)); //画矩形
}
imshow("test", src);
waitKey(50);
}
return 0;
}
CascadeClassifier+Haar:
#include <iostream> // for standard I/O
#include <string> // for strings
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp> // Basic OpenCV structures (cv::Mat)
#include <opencv2/videoio.hpp> // Video write
#include <opencv2/objdetect.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main(int argc,char * argv[]){
VideoCapture inputVideo(0);
CascadeClassifier face_cascade;
if (!face_cascade.load("D:/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml"))
{
cout << "--(!)Error loading face cascade\n";
return -1;
};
vector<Rect> faces;
Mat src,gray;
for (;;)
{
inputVideo >> src;
face_cascade.detectMultiScale(src, faces,1.05,3,0);
for (int i = 0;i < faces.size();i++) {
rectangle(src, faces[i], Scalar(0, 255, 0));
}
imshow("test", src);
waitKey(50);
}
return 0;
}
CascadeClassifier+LBP:
#include <iostream> // for standard I/O
#include <string> // for strings
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp> // Basic OpenCV structures (cv::Mat)
#include <opencv2/videoio.hpp> // Video write
#include <opencv2/objdetect.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main(int argc,char * argv[]){
VideoCapture inputVideo(0);
CascadeClassifier face_cascade;
if (!face_cascade.load("D:/opencv/sources/data/lbpcascades/lbpcascade_frontalface_improved.xml"))
{
cout << "--(!)Error loading face cascade\n";
return -1;
};
vector<Rect> faces;
Mat src,gray;
for (;;)
{
inputVideo >> src;
face_cascade.detectMultiScale(src, faces,1.05,3,0);
for (int i = 0;i < faces.size();i++) {
rectangle(src, faces[i], Scalar(0, 255, 0));
}
imshow("test", src);
waitKey(50);
}
return 0;
}
细心的可能发现了,Haar和LBP除了模型不一样其他都一毛一样,是的,就是这样...
说明:
视频检测,显示都是特别花时间的处理,现在的目标检测库很多,不一定要使用OpenCV本身的,虽然我了解不多但还是可以凭我自己理解说一下。
OpenCV自身目标检测:
HOG+SVM:人体检测效果比较好,但是比较花时间
CascadeClassifier+Haar:速度比HOG要快一些
CascadeClassifier+LBP:速度快大概是Haar的两倍左右,精度差。
总是以上三种,各有千秋,算法什么的我也不太懂,自己调查吧。
第三方目标检测:
YOLO:*,高效,对C语言有良好的支持,对于深度学习有了解的话可以试试...
InferenceEngine:大佬Intel的东西你懂的,需要搭配神经计算棒效果更佳,要花不少钱...
可以和OpenCV配合使用,很方便。
本文地址:https://blog.csdn.net/yuxipro/article/details/107274560