Opencv 学习之路(一)

前面很长一段时间一直在用opencv库但是一直没有去系统的学习,都是遇到问题直接百度,连库内大多数函数都不认识。最近闲下来了打算系统将opencv学习下

1、打开图片

2、读取视频

3、打开摄像头拍照

4、对摄像头捕获的画面进行处理

  1. 打开图片
#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);
		
		
	}

}

                                            在图像中间加上了水印

猜你喜欢

转载自blog.csdn.net/weixin_42047785/article/details/82811712