皆さんこんいちは!這是我窩關(guān)于OpenCV(C++版本)零基礎(chǔ)入門(mén)筆記的草稿!本系列文章主要通過(guò)每次一個(gè)小案例從而由淺至深地帶你入門(mén),后期的進(jìn)階文章將跟隨DIP和CV的wiki結(jié)合公式及具體原理詳細(xì)聊一聊OpenCV這個(gè)項(xiàng)目。本次文章主要內(nèi)容為簡(jiǎn)單概述OpenCV和結(jié)構(gòu)與顯示圖片的范例。

OpenCV概述:
OpenCV是一個(gè)由Intel公司于1999年發(fā)起的基于C和C++的開(kāi)源跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù)項(xiàng)目。項(xiàng)目的目標(biāo)是提供易于使用的計(jì)算機(jī)視覺(jué)接口,從而幫助人們快速建立精巧的視覺(jué)應(yīng)用。它基于BSD的許可。
OpenCV最初是因?yàn)镮ntel想要增強(qiáng)CPU集群性能的研究并為計(jì)算機(jī)視覺(jué)提供通用接口,從而還可以間接促使用戶們購(gòu)買更快地處理器,對(duì)計(jì)算機(jī)視覺(jué)科學(xué)的發(fā)展和企業(yè)自身利益中都有著很大的益處,可謂是一箭雙雕(x)。
OpenCV庫(kù)目前包含從計(jì)算機(jī)視覺(jué)各個(gè)領(lǐng)域衍生出來(lái)的數(shù)百個(gè)函數(shù)。大到工業(yè)的產(chǎn)品質(zhì)量檢驗(yàn),醫(yī)療(x光片ct..)小到樓宇監(jiān)控,相機(jī)校正,人臉識(shí)別..如今你已經(jīng)可以在幾乎任何地方看到OpenCV的身影。目前已有成千上萬(wàn)的用戶以及企業(yè)已投身到OpenCV的開(kāi)發(fā)與應(yīng)用當(dāng)中。
OpenCV的結(jié)構(gòu):
OpenCV是由層級(jí)結(jié)構(gòu)組織的。
First:OpenCV和操作系統(tǒng)的交互。 硬件加速層HAL:SSE,NENO,IPP,OpenGL,CUDA,.. Second:語(yǔ)言綁定和示例程序。 core,imgproc,objdetect,.. Third:opencv_contrib模塊包含的由其他人所貢獻(xiàn)的代碼。 face,text,rgbd,.. Fourth:各種語(yǔ)言的接口以及一些范例。 Bindings,Samples..
OpenCV的頭文件們(opencv.hpp):
"opencv2/core/core_c.h" 舊式C風(fēng)格的結(jié)構(gòu)以及運(yùn)算。 "opencv2/core/core.hpp" 新式C++風(fēng)格的結(jié)構(gòu)以及數(shù)字運(yùn)算。 "opencv2/flann/minflann.hpp" 最鄰近搜索匹配函數(shù)。 "opencv2/imgproc/imgproc_c.h" 舊式C風(fēng)格的圖像處理函數(shù)。 "opencv2/imgproc/imgproc.hpp" 新式C++風(fēng)格圖像處理函數(shù)。 "opencv2/video/photo.hpp" 操作和恢復(fù)照片的相關(guān)算法。 "opencv2/video/video.hpp" 視覺(jué)追蹤以及背景分割。 "opencv2/features2d/features2d.hpp" 用于追蹤二維特征。 "opencv2/objdetect/objdetect.hpp" 級(jí)聯(lián)人臉?lè)治銎?latentSVM分類器,HoG特征和平面檢測(cè)器。 "opencv2/calib3d/calib3d.hpp" 校準(zhǔn)以及雙目視覺(jué)相關(guān)。 "opencv2/ml/ml.hpp" 機(jī)器學(xué)習(xí),聚類以及模式識(shí)別相關(guān)。 "opencv2/highgui/highgui_c.h" 舊式C風(fēng)格顯示,滑動(dòng)條,鼠標(biāo)操作以及輸入輸出相關(guān)。 "opencv2/highgui/highgui.hpp" 新式C++風(fēng)格的顯示,滑動(dòng)條,鼠標(biāo)操作以及輸入輸出相關(guān)。 "opencv2/contrib/contrib.hpp" 用戶貢獻(xiàn)的代碼,皮膚檢測(cè),模糊Mean-Shift追蹤,spin image算法及自相似特征等。
通過(guò)OpenCV庫(kù)顯示圖片:
#include "opencv2/opencv.hpp" using namespace cv; int main(int argc, char** argv){ Mat img = imread(argv[1],-1); if(img.empty()) return -1; namedWindow("DisplayPic",cv::WINDOW_AUTOSIZE); imshow("DisplayPic",img); waitKey(0); destoryWindow("DisPlayPic"); return 0; }
部分代碼解析:
Mat img = imread(argv[1],-1);
自動(dòng)為圖像分配內(nèi)存空間并寫(xiě)入圖像到內(nèi)存,初始化。
if(img.empty()) return -1;
如果圖像為空,則返回錯(cuò)誤信息到函數(shù)。
namedWindow("DisplayPic",cv::WINDOW_AUTOSIZE);
通過(guò)HighGUI函數(shù)將窗口的名稱及大小賦予給窗口。
imshow("DisplayPic",img);
顯示圖像:創(chuàng)建窗口讀入窗口配置并繪制圖像。
waitKey(0);
暫停并通過(guò)時(shí)間等待鍵盤(pán)事件。大于零則等待時(shí)間為毫秒,小于等于零則無(wú)限等待。
destoryWindow("DisPlayPic");
銷毀窗口并釋放相關(guān)內(nèi)存。
擴(kuò)展閱讀: