#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
);
这两个函数可以用在程序的任何地方来读取或设置滑动条的值。