首页 > 代码库 > [OpenCV]1 体验OpenCV

[OpenCV]1 体验OpenCV

 1 #include "highgui.h" 2  3 int main(int argc,char** argv) 4 { 5      IplImage* img=cvLoadImage(argv[1]); 6      cvNamedWindow("Test1",CV_WINDOW_AUTOSIZE); 7      cvShowImage("Test1",img); 8      cvWaitKey(0); 9      cvReleaseImage(&img);10      cvDestoryWindow("Test1");11 }

如果是完完全全的OpenCV初学者的话也许argv[1]会让人感到困惑,其实这里也可以用Linux地址来代替的,记得多用一个"\",因为需要转义。cvLoadImage()函数是一个高层调用接口,它通过文件名来确定加载文件的格式,并且该函数将自动分配图像数据结构所需的内存。

 

 1 #include<cv.h> 2 #include<highgui.h> 3  4 void my_mouse_callback(int event, int x, int y, int flags, void* param); 5  6 CvRect box; 7 bool drawing_box = false; 8  9 void draw_box(IplImage* img, CvRect rect)10 {11     cvRectangle(img, 12         cvPoint(box.x, box.y), 13         cvPoint(box.x + box.width, box.y + box.height),14         cvScalar(0xff, 0x00, 0x00));15 }16 17 int main(int argc, char* argv[])18 {19     box = cvRect(-1, -1, 0, 0);20     IplImage* image = cvCreateImage(21         cvSize(200, 200),22         IPL_DEPTH_8U,23         3);24     cvZero(image);25     IplImage* temp = cvCloneImage(image);26     cvNamedWindow("Box Example");27 28     cvSetMouseCallback("Box Example",29         my_mouse_callback,30         (void*)image);31 32     while (1)33     {34         cvCopyImage(image, temp);35         if (drawing_box)36             draw_box(temp, box);37         cvShowImage("Box Example", temp);38 39         if (cvWaitKey(15) == 27)40             break;41     }42 43     cvReleaseImage(&image);44     cvReleaseImage(&temp);45     cvDestroyWindow("Box Example");46 }47 48 void my_mouse_callback(int event, int x, int y, int flags, void* param)49 {50     IplImage* image = (IplImage*)param;51 52     switch (event)53     {54     case CV_EVENT_MOUSEMOVE:55     {56         if (drawing_box)57         {58             box.width = x - box.x;59             box.height = y - box.y;60         }61     }62         break;63     case CV_EVENT_LBUTTONDOWN:64     {65         drawing_box = true;66         box = cvRect(x, y, 0, 0);67     }68         break;69     case CV_EVENT_LBUTTONUP:70     {71         drawing_box = false;72         if (box.width < 0)73         {74             box.x += box.width;75             box.width *= -1;76         }77         if (box.height<0)78         {79             box.y += box.height;80             box.height *= -1;81         }82         draw_box(image, box);83     }84         break;85     }86 }

HighGUI中创建滑动条的函数如下,前2个参数分别指定了滑动条的名字以及滑动条附属窗口的名字。随后的两个参数之一为value,它是一个整形指针,当滑动条被拖动时,OpenCV会自动将当前位置所代表的值传给指针指向的整数,另外一个参数count是一个整数值,为滑动条所能表示的最大值。最后一个参数是一个指向回掉函数的指针,当滑动条被拖动时,回掉函数会自动被调用。这跟鼠标事件的函数实现类似。回掉函数必须为CvTrackbarCallback格式。

1 int cvCreateTrackbar2 (  const char* trackbar_name,3    const char* window_name,4    int* value,5    int   count,6    CvTrackerCallback  on_change7 );

 

1 void (*callback) (int position)

 

 1 int cvGetTrackbarPos 2 ( 3     const char* trackbar_name, 4     const char* window_name 5 ); 6  7 void cvSetTrackbarPos 8 ( 9     const char* trackbar_name,10     const char* window_name,11     int pos12 );

 

[OpenCV]1 体验OpenCV