前面很长一段时间一直在用opencv库但是一直没有去系统的学习,都是遇到问题直接百度,连库内大多数函数都不认识。最近闲下来了打算系统将opencv学习下
1、打开图片
2、读取视频
3、打开摄像头拍照
4、对摄像头捕获的画面进行处理
- 打开图片
#include <opencv2/opencv.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
using namespace cv;
//---------------------------------main函数--------------------------------------
// 打开图片
//-------------------------------------------------------------------------------
int main()
{
// 【1】 打开图片
Mat pic = imread("LOL1.jpg");
// 【2】 命名窗口
namedWindow("图像", 1);
// 【3】 显示图片
imshow("图像", pic);
// 【4】 按esc退出
if (waitKey(0) == 27)
{
pic.release();
destroyAllWindows();
}
}
2.读取视频
#include <opencv2/opencv.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
using namespace cv;
//---------------------------------main函数--------------------------------------
// 读取视频
//-------------------------------------------------------------------------------
int main()
{
VideoCapture cap;
// 打开视频
cap.open("F://QLDownload//LOL//LOL.mp4");
//如果视频不能正常打开则返回
if (!cap.isOpened())
{
printf("视频打开失败");
return 0;
}
while (1)
{
Mat frame;
cap >> frame;
// 如果某帧为空则退出循环
if (frame.empty())
break;
imshow("视频", frame);
if (waitKey(0) == 27)
{
frame.release();
destroyAllWindows();
break;
}
}
}
3.打开摄像头拍照
#include <opencv2/opencv.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
using namespace cv;
//---------------------------------main函数--------------------------------------
// 读取视频
//-------------------------------------------------------------------------------
int main()
{
VideoCapture cap(0);
if (!cap.isOpened())
printf("摄像头打开失败!!!");
Mat frame;
int i = 0;
while (1)
{
cap >> frame;
cvNamedWindow("视频", 1);
imshow("视频", frame);
if (waitKey(10) == 32)//空格拍照
{
string name = "H:\\Text\\C++\\Headpose\\Opencv_test\\Test_pic\\";
stringstream id;
id << i;
string name_id = name + id.str() +".jpg";
cout << name_id << endl;
imwrite(name_id, frame);
i++;
}
if (waitKey(1) == 27)// ESC退出
{
frame.release();
destroyAllWindows();
break;
}
}
}
4.对摄像头捕获的画面进行处理
#include <opencv2/opencv.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main( int argc, char** argv)
{
VideoCapture capture(0);
if (!capture.isOpened())
printf("摄像头打开失败!!!");
Mat pic;
Mat imageROI;
Mat logoImage = imread("H:/Text/C++/Headpose/test2/logo.jpg", 1);
if (!logoImage.data)
{
printf("读取图片lollogo.jpg 失败! \n");
return false;
}
while (1)
{
capture >> pic;
imageROI = pic(Rect(220, 180, logoImage.cols, logoImage.rows));
addWeighted(imageROI, 0.4, logoImage, 0.9, 0., imageROI);
//cout << pic.cols << pic.rows << endl;
//pic: 640 480
//logo : 200 200
cvNamedWindow("读取视频", 1);
//cvResizeWindow("读取视频", 1080, 860);
imshow("读取视频", pic);
if (waitKey(10) == 27)
{
pic.release();
destroyAllWindows();
break;
}
//waitKey(30);
}
}