標籤:des style class blog code color
分為:硬體相關部分,檔案部分以及圖形使用者介面部分
建立視窗 —— cvNamedWindow
若設定成 CV_WINDOW_AUTOSIZE 視窗大小會隨著映像的載入而根據映像大小調整,使用者沒辦法手動調整視窗大小
設定成 0 ,隨意調整
cvDestoyWindow cvDestroyAllWindows
cvGetWindowHandle cvGetWindowName
cvLoadImage 讀入16位的彩色映像 —— CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYDEPTH
滑鼠事件相應採用回呼函數的方式處理
CvMouseCallback
cvSetMouseCallback —— 註冊到視窗(產生事件的視窗)
#include <cv.h>#include <highgui.h>CvRect box;bool drawing_box = false;void my_mouse_callback(int event,int x,int y,int flags,void* param);void draw_box(IplImage* img,CvRect rect){ cvRectangle(img,cvPoint(box.x,box.y),cvPoint(box.x+box.width,box.y+box.height),cvScalar(0xff,0x00,0x00));}int main(int argc,char** argv){ box=cvRect(-1,-1,0,0); IplImage* img=cvCreateImage(cvSize(200,200),IPL_DEPTH_8U,3); cvZero(img); IplImage* temp=cvCloneImage(img); cvNamedWindow("w1"); cvSetMouseCallback("w1",my_mouse_callback,(void*)img); while(1) { cvCopyImage(img,temp); if(!drawing_box) draw_box(temp,box); cvShowImage("w1",temp); if(cvWaitKey(15)==27) break; } cvReleaseImage(&img); cvReleaseImage(&temp); cvDestroyWindow("w1"); return 0;}void my_mouse_callback(int event,int x,int y,int flags,void* param){ IplImage* img=(IplImage*)param; switch(event) { case CV_EVENT_MOUSEMOVE: { if(drawing_box) { box.width=x-box.x; box.height=y-box.y; } } break; case CV_EVENT_LBUTTONDOWN: { drawing_box=true; box=cvRect(x,y,0,0); } break; case CV_EVENT_LBUTTONUP: { drawing_box=false; if(box.width<0) { box.x+=box.width; box.width*=-1; } if (box.height<0) { box.y+=box.height; box.height*=-1; } draw_box(img,box); } break; }}
sliders —— trackbar 滑動條 cvCreateTrackbar 回呼函數
cvGetTrackbarPos cvSetTrackbarPos —— 讀取設定滑動條的取值
OpenCV 不提供任何形式的按鈕,用只有兩個狀態的滑動條來代替
#include <cv.h>#include <highgui.h>int g_switch_value =0;IplImage* img;IplImage* temp;void Switch_callback(int position){ if(position==0) { cvShowImage("w1",img); }else { cvShowImage("w1",temp); }}int main(int argc,char** argv){ cvNamedWindow("w1",CV_WINDOW_AUTOSIZE); cvCreateTrackbar("Switch","w1",&g_switch_value,1,Switch_callback); img=cvLoadImage("wukong.jpg",CV_LOAD_IMAGE_UNCHANGED); temp=cvLoadImage("test.jpg",CV_LOAD_IMAGE_UNCHANGED); while(1) { if (cvWaitKey(15)==27) break; } cvDestroyWindow("w1"); return 0;}
視頻處理
CvCapture —— 從攝像機或視頻檔案中讀取幀所需要的資訊
cvCreateFileCapture cvCreateCameraCapture —— 為了使視頻可以被成功讀入,必須確保這種視頻解碼庫已經安裝在系統中
cvCreateCameraCapture -1 時,Opencv會開啟一個視窗讓使用者選擇
讀視頻
cvGrabFrame(快速將視訊框架讀入記憶體,下一次調用時,指標所指向的空間會被新的映像覆蓋,如果想做特殊處理需要先複製到其他地方。此記憶體空間由Opencv管理,不要去釋放) cvRetrieveFrame cvQueryFrame(是cvGrabFrame 與 cvRetrieveFrame 的組合)
對一個視頻檔案,當調用 cvGrabFrame ,視訊框架會自動前進一步,下一次調用會自動讀入下一幀視頻
cvReleaseCapture
cvGetCaptureProperty
cvVideoWriter 寫視頻 —— 不顯式地釋放寫入結構,視頻檔案可能會被損壞 —— cvReleaseVideoWriter
HighGUI 中煢煢孑立的一個函數 —— ConvertImage (用於在不同映像格式之間轉換 , 可以垂直旋轉映像 —— 有時候攝像機映像格式與映像顯示格式會反轉)