基于opencv4,识别字母W。
先上代码:
//读取视频,捕获w,并保存视频
#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/highgui/highgui_c.h>
using namespace cv;
using namespace std;
CascadeClassifier W_cascader;
String Wfile = "H:/VS/Opencv/program/Training_data/alphabet/letter_w_2/HaarResult/cascade.xml"; //联级分类器的地址
int main(int argc, char** argv) {
//加载分类器
if (!W_cascader.load(Wfile)) {
printf("could not load file...\n");
return -1;
}
namedWindow("demo-win", CV_WINDOW_AUTOSIZE);
VideoCapture capture;
Mat frame;
Mat gray;
vector<Rect>faces;
capture.open("H:/VS/vedio/W_4.mp4"); //加载视频的地址
capture.read(frame);
//配置视频录制
VideoWriter writer;
int codec = VideoWriter::fourcc('M', 'J', 'P', 'G'); // 选择编码格式
double fps = 25.0; //设置视频帧率
string filename = "live.avi"; //保存的视频文件名称
writer.open(filename, codec, fps, frame.size(), 1); //创建保存视频文件的视频流
while (capture.read(frame)) {
cvtColor(frame, gray, COLOR_RGB2GRAY);
equalizeHist(gray, gray);
W_cascader.detectMultiScale(gray, faces, 1.1, 1, 0, Size(300, 300));
for (size_t t = 0;t < faces.size();t++) {
rectangle(frame, faces[t], Scalar(255, 0, 0), 2, 8, 0);
}
imshow("demo-win", frame);
writer.write(frame); //把图像写入视频流
char c = waitKey(30);
if (c == 27) { //esc
break;
}
}
//release source
capture.release();
waitKey(0);
return 0;
}
代码的主要思路为,
有效果视频呢,在下面视频的结尾!!!!
https://www.bilibili.com/video/BV1Ny4y1n7Xr/
因为训练的数据有限,暂时还不能满足一些极端情况(如旋转等)
关注并私信博主,发所有相关资料!!!
如果有帮助,记得三连哦!!