赞
踩
首先查看设备是否接入,用如下命令
ls -la /etc/dev | grep video
出现了设备就表明接入成功了。
tar -xjvf OpenCV-3.4.12.tar.gz2
cd opencv
mkdir build
cmake ..
make
sudo make install
到这个阶段你的所有的库都已经生成了,你现在就需要调用,首先写代码。
#include "opencv2/core/core.hpp" #include "opencv2/imgproc/imgproc.hpp" #include"opencv2/highgui/highgui.hpp" #include "opencv2/objdetect/objdetect.hpp" #include <sstream> #include<iostream> #include<string> using namespace cv; using namespace std; int main() { Mat image, image_gray; //定义两个Mat变量,用于存储每一帧的图像 VideoCapture capture(0); //从摄像头读入视频 int num=0; while (1) //循序显示每一帧 { capture >> image; //读取当前帧 cvtColor(image, image_gray, CV_RGB2GRAY); //转灰度图 equalizeHist(image_gray,image_gray); //直方图均衡化,增强对比度方便处理 CascadeClassifier eye_Classifier; //载入分类器 CascadeClassifier face_cascade; //载入分类器 //加载分类训练器,OpenCV官方文档的xml文档,可以直接调用 if (!eye_Classifier.load("../../haar/OpenCV_xml/haarcascade_eye.xml")) //把xml文档复制到了当前项目的路径下 { printf("chucuo"); return 0; } if (!face_cascade.load("../../haar/OpenCV_xml/haarcascade_frontalface_alt.xml")) //把xml文档复制到了当前项目的路径下 { printf("chucuo"); return 0; } //vector 是个类模板 需要提供明确的模板实参 vector<Rect>则是个确定的类 模板的实例化 vector<Rect> eyeRect; vector<Rect> faceRect; //检测眼睛的位置 eye_Classifier.detectMultiScale(image_gray, eyeRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30)); printf("%d\n",eyeRect.size()); if(eyeRect.size() < 1){ continue; } for (size_t eyeIdx = 0; eyeIdx < eyeRect.size(); eyeIdx++) { rectangle(image, eyeRect[eyeIdx], Scalar(0, 0, 255)); //用矩形画出检测到的眼睛的位置 } /* CV_WRAP virtual void detectMultiScale( const Mat& image, CV_OUT vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size() ); 各参数含义: const Mat& image: 需要被检测的图像(灰度图) vector<Rect>& objects: 保存被检测出的人脸位置坐标序列 double scaleFactor: 每次图片缩放的比例 int minNeighbors: 每一个人脸至少要检测到多少次才算是真的人脸 int flags: 决定是缩放分类器来检测,还是缩放图像 Size(): 表示人脸的最大最小尺寸 */ //检测关于脸部的位置 face_cascade.detectMultiScale(image_gray, faceRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30)); cout << "face" << faceRect.size() << endl; if(faceRect.size() < 2){ continue; } for (size_t i = 0; i < faceRect.size(); i++) { rectangle(image, faceRect[i], Scalar(0, 0, 255)); //用矩形画出检测到脸部的位置 } string str = to_string(num); string name = str + ".jpg"; num++; imwrite(name,image); // waitKey(1); char c = waitKey(30); //延时30ms,即每秒播放33帧图像 if (c == 27) break; } return 0; }
g++ opencv.cpp `pkg-config opencv --cflags --libs`
./a.out
我在里面用到了联级分类器,大家只需要修改自己的分类器路径就好。
raspistill命令只能用于CSI摄像头。对于USB接口的摄像头,可以通过调用fswebcam进行访问。在树莓派终端输入sudo apt-get install fswebcam安装fswebcam。通过输入sudo fswebcam image.jpg进行拍照测试。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。