Opencv 學習之路(一)
阿新 • • 發佈:2018-12-11
前面很長一段時間一直在用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);
}
}