《OpenCV3编程入门》学习笔记1 邂逅OpenCV
第1章 邂逅OpenCV
1.1 OpenCV周邊概念認知
1.圖像處理(Image Processing):計算機對圖像進行分析,以達到所需結果的技術,又稱影像處理。側重處理。
2.圖像處理技術:圖像壓縮,增強和復原,匹配、描述和識別3個部分。
3.數字圖像:工業相機、攝像機、掃描儀等設備經過拍攝得到的一個大的二維數組。數組元素為像素,值為灰度值。
4.數字圖像處理(Digital Image Processing):通過計算機對圖像進行去除噪聲、增強、復原、分割、提取特征等處理的方法和技術。
5.計算機視覺(computer vision):用攝影機和電腦替代人眼對目標進行識別、跟蹤和測量等機器視覺,并進一步做圖形處理,用電腦處理使之成為更合適人眼觀察或傳送給儀器檢測的圖像的一門學科。側重模擬。
6.OpenCV(Open Source Computer Vision Library):一個基于開源發行的跨平臺計算機視覺庫。可以運行在多種操作系統上,由一系列C函數和C++類構成,還支持C#、Ch7、Ruby等編程語言,同時提供Python、Ruby、MATLAB等語言的接口。
OpenCV應用:人機交互、物體識別、圖像分區、人臉識別、動作識別、運動跟蹤、機器人
1.2 OpenCV基本構架分析
1.\opencv\build\include目錄:opencv、opencv2文件夾分別包含舊版、新版頭文件
2.opencv2文件夾中:opencv_modules.hpp的hpp文件存放OpenCV2中與新模塊構造相關的代碼說明,定義了OpenCV2所有組件的宏。
3.OpenCV所有模塊:
(1)【calib3d】–Calibration(校準)和3D,相機校準和三維重建,包括基本的多視角集合算法、單個立體攝像頭標定、物體姿態估計、立體相似性算法、3D信息的重建。
(2)【contrib】–Contributed/Exprimental Stuf,新型人臉識別、立體匹配、人工視網膜模型等技術。
(3)【core】–核心功能模塊,包含OpenCV基本數據結構、動態數據結構、繪圖函數、數組操作相關函數、輔助功能與系統函數和宏、與OpenGL的互操作。
(4)【imgproc】–圖像處理模塊,包含線性和非線性的圖像濾波、圖像的幾何變換、其他圖像變換、直方圖相關、結構分析和形狀描述、運動分析和對象跟蹤、特征檢測、目標檢測等。
(5)【features2d】–2D功能框架,包含特征檢測和描述、特征檢測器(Feature Detectors)通用接口、描述符提取器(Descriptor Extractors)通用接口、描述符匹配器(Descriptor Matchers)通用接口、通用描述符(Generic Descriptor)匹配器通用接口、關鍵點繪制函數和匹配功能繪制函數。
(6)【flann】–Fast Library for Approximate Nearest Neighbors,高維的近似近鄰快速搜索算法庫,包括快速近似最近鄰搜索、聚類。
(7)【gpu】–運用GPU加速的計算機視覺模塊
(8)【highgui】–高層GUI圖形用戶接口界面,包含媒體的輸入輸出、視頻捕捉、圖像和視頻的編碼解碼、圖形交互界面的接口等。
(9)【legacy】–廢棄代碼庫
(10)【ml】–Machine Learning,機器學習模塊,統計模型和分類算法
(11)【nonfree】–一些具有專利的模塊,包含特征檢測和GPU相關的內容
(12)【objdetect】–目標檢測模塊,包含Cascade Classifacation(級聯分類)和Latent SVM
(13)【ocl】–OpenCL-accelerated Computer Vision,運用OpenCL加速的計算機視覺組件模塊
(14)【photo】–Computational Photography,包含圖像修復和圖像去噪
(15)【stitching】–images stitching,圖像拼接模塊,包含拼接流水線、特點尋找和匹配的圖像、估計旋轉、自動校準、圖片歪斜、接縫估測、曝光補償、圖片混合
(16)【superres】–SuperResolution,超分辨率技術的相關功能模塊
(17)【ts】–OpenCV測試相關代碼
(18)【video】–視頻分析組件,包含運動估計、背景分離、對象跟蹤等
(19)【Videostab】–Video stabilization,視頻穩定相關的組件
1.3 OpenCV3
項目構架改變:OpenCV基本構架中,是一個相對與整體的項目,各個模塊以整體的形式構建組合。而OpenCV3拋棄整體構架,使用內核+插件的構架形式。
1.4 OpenCV的下載、安裝與配置
OpenCV3.4.1+visual studio 2017環境配置(永久配置版),CSDN上一堆堆,選個不錯的吧~
https://blog.csdn.net/weixin_42836481/article/details/81358695
1.5 OpenCV圖像處理
1.圖像顯示
#include<opencv2/opencv.hpp>
using namespace cv;int main()
{Mat img = imread("1.jpg");imshow("[載入的圖片]", img);waitKey(6000);
}
2.圖像腐蝕
#include<opencv2/highgui/highgui.hpp> //opencv highgui模塊頭文件
#include<opencv2/imgproc/imgproc.hpp> //opencv 圖像處理頭文件
using namespace cv;//包含cv命名空間int main()
{//載入原圖Mat srcImage = imread("1.jpg");//顯示原圖imshow("[原圖]腐蝕操作", srcImage);//進行腐蝕操作Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); //函數返回指定形狀和尺寸的結構元素(內核矩陣)Mat dstImage;erode(srcImage, dstImage, element);//顯示效果圖imshow("[效果圖]腐蝕操作", dstImage);waitKey(0); //等待按鍵按下,以便讓窗口一直顯示return 0;
}
3.圖像模糊
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{//[1]載入原始圖Mat srcImage = imread("1.jpg");//[2]顯示原始圖imshow("均值濾波[原圖]",srcImage);//[3]進行均值濾波操作Mat dstImage;blur(srcImage, dstImage, Size(7, 7));//[4]顯示效果圖imshow("均值濾波[效果圖]", dstImage);//[5]等待鍵盤輸入waitKey(0);
}
4.canny邊緣檢測
#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;int main()
{//[0]載入原始圖Mat srcImage = imread("2.jpg");//顯示原始圖imshow("[原始圖]canny邊緣檢測",srcImage);//[1]創建與src同類型和大小的矩陣(dst)Mat dstImage, edge, grayImage;dstImage.create(srcImage.size(), srcImage.type());//[2]將原圖像轉換為灰度圖像//此句代碼的Opencv2版為://cvtColor(srcImage,grayImage,CV_BGR2GRAY);//此句代碼的Opencv3版為:cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);//[3]先使用3*3內核來降噪blur(grayImage, edge, Size(3, 3));//[4]運行Canny算子Canny ( edge, edge, 3, 9, 3);//[5]顯示效果圖imshow("[效果圖]canny邊緣檢測", edge);waitKey(0);return 0;
}
1.6 OpenCV視頻操作基礎
OpenCV視頻操作,利用OpenCV中的VideoCapture類,對視頻進行讀取顯示及調用攝像頭
1.讀取并播放視頻
#include<opencv2/opencv.hpp>
using namespace cv;int main()
{//[1]讀入視頻//實例化并初始化VideoCapture//VideoCapture capture("1.avi");VideoCapture capture;capture.open("1.avi");//[2]循環顯示視頻的每一幀while (1){Mat frame; //定義一個Mat變量,用于存儲每一幀的圖像capture >> frame; //讀取當前幀imshow("讀取視頻", frame); //顯示當前幀waitKey(30); //延時30ms}return 0;
}
2.調用攝像頭采集圖像
//利用VideoCapture類調用攝像頭采集視頻和從文件中讀入視頻的區別僅在于VideoCapture類對象初始化時指定的內容//即是指定文件“1.avi”還是填0表示攝像頭#include<opencv2/opencv.hpp>
using namespace cv;int main()
{//[1]從攝像頭讀入視頻VideoCapture capture(0);//[2]循環顯示每一幀while (1){Mat frame; //定義一個Mat變量,用于存儲每一幀的圖像capture >> frame; //讀取當前幀imshow("讀取視頻", frame); //顯示當前幀waitKey(30); //延時30ms}return 0;
}
3.利用攝像頭調用示例程序配合canny邊緣檢測,得到canny邊緣檢測并高斯模糊后的攝像頭采集視頻
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{//從攝像頭讀入視頻VideoCapture capture(0);Mat edges;//循環顯示每一幀while(1){//[1]讀入圖像Mat frame; //定義一個Mat變量,用于存儲每一幀的圖像capture >> frame; //讀取當前幀//[2]將原圖像轉換為灰度圖像cvtColor(frame, edges, COLOR_BGR2GRAY);//[3]用3*3內核來降噪(2*3+1=7)blur(edges, edges, Size(7, 7)); //進行模糊//[4]進行canny邊緣檢測Canny(edges, edges, 0, 30, 3);//[5]顯示效果imshow("被canny后的視頻", edges); //顯示經過處理后的當前幀if (waitKey(30) >= 0) break; //延時30ms}return 0;
}
總結
以上是生活随笔為你收集整理的《OpenCV3编程入门》学习笔记1 邂逅OpenCV的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 死的飞蛇过德下一句是什么啊?
- 下一篇: C语言程序设计 细节总结(第1-7章)