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