OpenCV —— HighGUI

來源:互聯網
上載者:User

標籤: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 (用於在不同映像格式之間轉換 , 可以垂直旋轉映像 —— 有時候攝像機映像格式與映像顯示格式會反轉)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.