【OpenCV归纳】1 体验OpenCV
#include "highgui.h" int main(int argc,char** argv) { IplImage* img=cvLoadImage(argv[1]); cvNamedWindow("Test1",CV_WINDOW_AUTOSIZE); cvShowImage("Test1",img); cvWaitKey(0); cvReleaseImage(&img); cvDestoryWindow("Test1"); }
如果是完完全全的OpenCV初学者的话也许argv[1]会让人感到困惑,其实这里也可以用Linux地址来代替的,记得多用一个"\",因为需要转义。cvLoadImage()函数是一个高层调用接口,它通过文件名来确定加载文件的格式,并且该函数将自动分配图像数据结构所需的内存。
#include<cv.h> #include<highgui.h> void my_mouse_callback(int event, int x, int y, int flags, void* param); CvRect box; bool drawing_box = false; 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* image = cvCreateImage( cvSize(200, 200), IPL_DEPTH_8U, 3); cvZero(image); IplImage* temp = cvCloneImage(image); cvNamedWindow("Box Example"); cvSetMouseCallback("Box Example", my_mouse_callback, (void*)image); while (1) { cvCopyImage(image, temp); if (drawing_box) draw_box(temp, box); cvShowImage("Box Example", temp); if (cvWaitKey(15) == 27) break; } cvReleaseImage(&image); cvReleaseImage(&temp); cvDestroyWindow("Box Example"); } void my_mouse_callback(int event, int x, int y, int flags, void* param) { IplImage* image = (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(image, box); } break; } }
HighGUI中创建滑动条的函数如下,前2个参数分别指定了滑动条的名字以及滑动条附属窗口的名字。随后的两个参数之一为value,它是一个整形指针,当滑动条被拖动时,OpenCV会自动将当前位置所代表的值传给指针指向的整数,另外一个参数count是一个整数值,为滑动条所能表示的最大值。最后一个参数是一个指向回掉函数的指针,当滑动条被拖动时,回掉函数会自动被调用。这跟鼠标事件的函数实现类似。回掉函数必须为CvTrackbarCallback格式。
int cvCreateTrackbar ( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackerCallback on_change );
void (*callback) (int position)
int cvGetTrackbarPos ( const char* trackbar_name, const char* window_name ); void cvSetTrackbarPos ( const char* trackbar_name, const char* window_name, int pos );
这两个函数可以用在程序的任何地方来读取或设置滑动条的值。