标签:
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 cvCreateTrackbar 2 ( const char* trackbar_name, 3 const char* window_name, 4 int* value, 5 int count, 6 CvTrackerCallback on_change 7 );
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 pos 12 );
标签:
原文地址:http://www.cnblogs.com/hom-ketg/p/4222808.html