opencv-3.4.1、Visual Studio 2017、Ubuntu
详情安装配置:https://blog.csdn.net/qq_38269799/article/details/80815385
配置时要将…\opencv\build\x64\vc15\bin目录下的3个dll动态链接库分别放在C:\Windows下的System32和SysWow64下
详情安装配置:https://www.cnblogs.com/mypsq/p/6114824.html
代码段:
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
void main()
{
VideoCapture capture(0);//如果是笔记本,0打开的是自带的摄像头,1 打开外接的相机
Mat img;
VideoWriter vw; //新建一个多媒体文件
namedWindow("cam");
int fps = capture.get(CAP_PROP_FPS*3); //获取摄像头的帧率
if (fps <= 0)fps = 25;
//设置视频的格式
vw.open("out2.avi", VideoWriter::fourcc('x', '2', '6','4'),fps
,Size(capture.get(CAP_PROP_FRAME_WIDTH),capture.get(CAP_PROP_FRAME_HEIGHT)));
if (!capture.isOpened()) //判断摄像头是否打开
{
cout << "open video faild";
getchar();
}
cout << "open video success" << endl;
if (!vw.isOpened()) //判断视频文件是否创建
{
cout << "open vw faild" << endl;
}
cout << "open vw success" << endl;
while (1)
{
capture.read(img); //读取视频帧
if (img.empty())
break;
imshow("cam", img); //显示视频帧
vw.write(img); //将视频帧写入文件
if (waitKey(10) == ' q') //q键退出录制
break;
}
}
提醒:视频格式不同,可能录像不了。电脑性能不同,可能实时录像的帧率不同,也就会导致录像播放速度不正常现象。我的录像就很快,无语。
长得太丑,来打个码,真好!
#include<opencv2/objdetect/objdetect.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
CascadeClassifier faceCascade;
int main()
{
faceCascade.load("./opencv3.4.1/data/haarcascades/haarcascade_frontalface_alt2.xml");
//网上说绝对路径,不成功,报错xml函数,!empty()出错。我改成相对路径,即ok。
VideoCapture capture;
capture.open(0);
capture.open("out2.avi");//导入的视频须明亮处。
if(!capture.isOpened())
{
cout << "open camera failed. " << endl;
return -1;
}
Mat img, imgGray;
vector<Rect> faces;
while(1)
{
capture >> img;
if(img.empty())
{
continue;
}
if(img.channels() == 3)
{
cvtColor(img, imgGray, CV_RGB2GRAY);
}
else
{
imgGray = img;
}
faceCascade.detectMultiScale(imgGray, faces, 1.2, 6, 0, Size(0, 0));
if(faces.size()>0)
{
for(int i =0; i<faces.size(); i++)
{
Mat faceROI = imgGray( faces[i] );
Mat faceOrg = img( faces[i] );
blur(faceOrg, faceOrg, Size(25,25));
std::vector<Rect> eyes;
//第三次成功,用园圈出人脸
//Point center(faces[i].x + faces[i].width / 2, faces[i].y + faces[i].height / 2); // 人脸中心坐标
//ellipse(img, center, Size(faces[i].width / 2, faces[i].height / 2), 0, 0, 360, Scalar(255, 0, 0), 4, 8, 0); // 椭圆
//第二次检测出人脸
//rectangle(img,faces[i], Scalar(0, 0, 255), 1, 8);
//
//第一次成功检测出人脸
rectangle(img, Point(faces[i].x, faces[i].y), Point(faces[i].x +
faces[i].width, faces[i].y + faces[i].height), Scalar(0, 0, 255), 1, 8);
}
}
imshow("CamerFace", img);
if(waitKey(1) > 0)
{
break;
}
}
return 0;
}
在试验中,我遇到的问题有:
1.无ffmpeg库
2.加载不了录像帧
3.如何进行帧的人脸识别
4.如何对人脸进行打码。
我的处理:
1.sudo apt install ffmpeg,安装ffmpeg
2.将人脸识别的相关库用相对路径
3.作为小白的我,经常百度,百度是最好的老师。
好了,我的首秀完成了。哪做的不好,还请多提建议。