专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 图形/图像

[OpenCV]一 体验OpenCV

发布时间:2011-06-27 19:37:23 文章来源:www.iduyao.cn 采编人员:星星草
[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 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 );

 

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: