OpenCV:幾個入門小demo
一、顯示影象
從磁碟中載入一張圖片並在螢幕上顯示
#include <iostream> #include <opencv2/opencv.hpp> using namespace cv; int main(int argc, const char * argv[]) { IplImage* img =cvLoadImage("/Users/Desktop/test.jpg"); cvNamedWindow("test",CV_WINDOW_AUTOSIZE); cvShowImage("test", img); cvWaitKey(0); cvReleaseImage(&img); cvDestroyWindow("test"); return 0; }
-
IplImage* img =cvLoadImage("/Users/Desktop/test.jpg");
將影象檔案載入到記憶體,並返回一個指標,此指標指向一塊位描述改該影象檔案的資料結構而分配的記憶體塊。IplImage結構體將是我們在使用OpenCV時最常用到的資料結構。OpenCV使用IplImage結構體處理諸如單通道、多通道、整型、浮點型等所有型別的影象檔案。
-
cvNamedWindow("test",CV_WINDOW_AUTOSIZE);
該函式由HighGUI庫提供,cvNamedWindow函式用於在螢幕上建立一個視窗。第一個引數指定了該視窗的標題,第二個定義了視窗的屬性,該引數可被設定為0(預設)或CV_WINDOW_AUTOSIZE。設定為0時視窗的大小不會因影象的大小而改變,CV_WINDOW_AUTOSIZE:則會根據影象的實際大小自動進行拉伸或縮放。
-
cvShowImage("test", img);
在一個已經建立的視窗上使用cvShowImage顯示影象。第一個引數確定在哪個已經存在的視窗中顯示影象。
-
cvWaitKey(0);
該函式的功能是使程式暫停,等待使用者觸發一個按鍵操作。如果將這個函式引數設為整數,則程式暫停一段時間。當設定為0或負數時,程式將一直等待使用者觸發按鍵操作。
二、播放一個小視訊
播放視訊幾乎與現實影象一樣容易。播放視訊是隻需要處理的問題是如何迴圈地讀取視訊中的每一幀,以及如何退出迴圈。
#include <iostream> #include <opencv2/opencv.hpp> using namespace cv; int main(int argc, const char * argv[]) { cvNamedWindow("test",CV_WINDOW_AUTOSIZE); CvCapture* capture=cvCreateFileCapture("/Users/Downloads/181123080148212016.mp4"); IplImage* frame; while (1) { frame= cvQueryFrame(capture); if(!frame)break; cvShowImage("test", frame); char c= cvWaitKey(33); if(c==27) break; } cvReleaseCapture(&capture); cvDestroyWindow("test"); return 0; }
CvCapture* capture=cvCreateFileCapture("/Users/Downloads/181123080148212016.mp4");
讀入視訊檔案返回一個CvCapture結構的指標。這個結構體包括了所有關於要讀入的視訊檔案的資訊。進入迴圈後cvQueryFrame用來將下一幀視訊檔案載入記憶體中返回一個當前幀的指標。與cvLoadImage不同的是cvLoadImage為影象分配記憶體空間,而cvQueryFrame使用已經在CvCapture結構中已經分配好的記憶體
三、一個簡單的變換
載入一張圖片病進行平滑處理
#include <iostream> #include <opencv2/opencv.hpp> using namespace cv; int main(int argc, const char * argv[]) { IplImage* image =cvLoadImage("/Users/huangyoubin/Desktop/test.jpg"); cvNamedWindow("test_in",CV_WINDOW_AUTOSIZE); cvNamedWindow("test_out",CV_WINDOW_AUTOSIZE); cvShowImage("test_in", image); IplImage* out =cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 3); cvSmooth(image, out,CV_GAUSSIAN,3,3); cvShowImage("test_out", out); cvWaitKey(0); cvReleaseImage(&image); cvReleaseImage(&out); cvDestroyWindow("test_in"); cvDestroyWindow("test_out"); return 0; }
-
IplImage* out =cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 3);
第一個引數CvSize:通過cvGetSize獲取,獲取當前影象的大小。
第二個引數:告訴我們各通道每個畫素點的資料型別。
最後一個引數:說明通道的總數
當前影象是3個通道(每個通道8位) -
cvSmooth
平滑處理實際上只是對cvSmooth函式的呼叫:指定輸入影象,輸出影象,平滑操作的方法以及平滑處理的一些引數。上面的程式中使用每個畫素周圍3*3區域進行高斯平滑處理。
上一篇:ofollow,noindex">OpenCV:mac上安裝和配置