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