1. 程式人生 > >Opencv 學習之路(一)

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);
		
		
	}

}

                                            在影象中間加上了水印