.hpp文件_3 OpenCV的头文件说明及第一个示例程序
在安裝OpenCV庫并設(shè)置好編程環(huán)境之后,我們的就可以讓代碼中發(fā)生一些有趣的事情。但是首先必須弄清楚頭文件。這些頭文件反映了前面介紹的OpenCV模塊化結(jié)構(gòu)。主頭文件是... / include / opencv2 / opencv.hpp; 它只是調(diào)用每個(gè)OpenCV模塊的頭文件。下面分別進(jìn)行說明:
#include "opencv2/core/core_c.h"
舊的C語言數(shù)據(jù)結(jié)構(gòu)和常規(guī)算法
#include"opencv2 / core / core.hpp"
新的C ++數(shù)據(jù)結(jié)構(gòu)和常規(guī)算法
#include"opencv2 / flann / miniflann.hpp"
最近鄰匹配函數(shù)
#include"opencv2 / imgproc / imgproc_c.h"
舊的C語言圖像處理函數(shù)
#include"opencv2 / imgproc / imgproc.hpp"
新的C ++圖像處理函數(shù)
#include"opencv2 / video / photo.hpp"
處理和修復(fù)照片的算法
#include"opencv2 / video / video.hpp"
視頻跟蹤和背景分割
#include"opencv2 / features2d / features2d.hpp"
二維特征跟蹤
#include"opencv2 / objdetect / objdetect.hpp"
級聯(lián)人臉檢測; 潛在SVM;HOG; 平面斑塊檢測
#include"opencv2 / calib3d / calib3d.hpp"
校準(zhǔn)和3D標(biāo)定
#include"opencv2 / ml / ml.hpp"
機(jī)器學(xué)習(xí):聚類,模式識別
#include"opencv2 / highgui / highgui_c.h"
舊的C語言圖像顯示,滑塊,鼠標(biāo)交互,I/O操作
#include"opencv2 / highgui / highgui.hpp"
新的C ++圖像顯示,滑塊,按鈕,鼠標(biāo),I/O操作
#include"opencv2 / contrib / contrib.hpp"
用戶貢獻(xiàn)的代碼
使用include文件opencv.hpp來包含任何可能的OpenCV函數(shù),但它會減慢編譯時(shí)間。 如果僅使用圖像處理函數(shù),僅包含opencv2 / imgproc / imgproc.hpp,則編譯時(shí)間會更快。 這些包括文件位于... / modules目錄下。 例如,imgproc.hpp位于... / modules / imgproc / include / opencv2 / imgproc / imgproc.hpp。函數(shù)源代碼位于其相應(yīng)的src目錄下。 例如,imgproc模塊中的cv :: Canny()位于... / modules / improc / src / canny.cpp中。
通過包含文件,我們可以開始我們的第一個(gè)C ++ OpenCV程序。
第一個(gè)程序 - 顯示圖片
OpenCV提供了用于從各種圖像文件類型以及從視頻和相機(jī)中讀取的實(shí)用程序。 這些實(shí)用程序是名為HighGUI的工具包的一部分,該工具包包含在OpenCV包中。 下面來創(chuàng)建一個(gè)簡單的程序,用于打開圖像并將其顯示在屏幕上。
例1:一個(gè)簡單的OpenCV程序,從硬盤加載圖像并將其顯示在屏幕上
#include //為每個(gè)支持的OpenCV函數(shù)包含文件int main(int argc, char** argv){Mat img = imread("e:/picture/1.jpg", -1);if (img.empty()) return -1;cv::namedWindow("Example1", cv:: WINDOW_AUTOSIZE);cv::imshow("Example1", img);cv::waitKey(0);cv::destroyWindow("Example1");return 0;}圖1 opencv顯示圖像
OpenCV函數(shù)位于名為cv的名稱空間內(nèi)。 要調(diào)用OpenCV函數(shù),必須通過在每個(gè)函數(shù)調(diào)用前加上cv ::來告訴編譯器使用cv命名空間。也可以使用using namespace cv; 這樣就不用每次都加上cv::。
例2采用了這種方式,同時(shí),只使用必要的包含文件來提高編譯時(shí)間,實(shí)現(xiàn)效果與例1完全一樣。
#include "opencv2/highgui/highgui.hpp"using namespace cv;int main( int argc, char** argv ){Mat img = imread("e:/picture/1.jpg", -1);if (img.empty()) return -1;namedWindow("Example1", WINDOW_AUTOSIZE);imshow("Example1", img);waitKey(0);destroyWindow("Example1");return 0;}下面對代碼行做一些說明。
cv::Mat img = cv::imread("e:/picture/1.jpg", -1 );
該行加載圖像。 函數(shù)cv :: imread()根據(jù)文件名確定要加載的文件格式; 它也會自動(dòng)分配圖像內(nèi)存。cv :: imread()可以讀取各種圖像格式,包括BMP,DIB,JPEG,JPE,PNG,PBM,PGM,PPM,SR,RAS和TIFF。 OpenCV使用這種結(jié)構(gòu)來處理各種圖像:單通道,多通道,整數(shù)值,浮點(diǎn)值等。
if( img.empty() ) return -1;
檢查圖像是否實(shí)際上被讀取。
cv::namedWindow( "Example1", cv::WINDOW_AUTOSIZE );
在屏幕上打開一個(gè)窗口,該窗口可以包含和顯示圖像。
HighGUI庫提供的這個(gè)函數(shù)也為窗口指定了一個(gè)名字(在本例中為"Example1")。 與此窗口交互的HighGUI調(diào)用將通過此名稱引用它。
cv :: namedWindow()的第二個(gè)參數(shù)定義了窗口屬性。 它可以設(shè)置為0(默認(rèn)值)或cv :: WINDOW_AUTOSIZE。 在前一種情況下,無論圖像大小如何,窗口的大小都是相同的,圖像將縮放以適合窗口。 在后一種情況下,窗口會在加載圖像時(shí)自動(dòng)擴(kuò)展或收縮,以適應(yīng)圖像的真實(shí)大小,但可能會由用戶調(diào)整大小。
cv::imshow( "Example1", img );
使用cv :: imshow()將圖像顯示在窗口中。 如果不使用cv :: namedWindow(),cv :: imshow()函數(shù)將創(chuàng)建一個(gè)窗口。并且窗口將根據(jù)適當(dāng)?shù)拇笮∽孕姓{(diào)整。
cv::waitKey( 0 );
cv :: waitKey()函數(shù)會要求程序停止并等待按鍵。如果參數(shù)設(shè)置為0或負(fù)數(shù),程序?qū)o限期地等待按鍵。
cv::destroyWindow( "Example1" );
銷毀窗體。 函數(shù)cv :: destroyWindow()將關(guān)閉窗口并釋放任何關(guān)聯(lián)的內(nèi)存使用情況。
總結(jié)
以上是生活随笔為你收集整理的.hpp文件_3 OpenCV的头文件说明及第一个示例程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机应用软件下载导航php源码_第八篇:
- 下一篇: arduino使用oled代码_实用!A