OpenCV HighGUI图形工具包

High GUI 三部分内容:

1)硬件部分:最主要的就是对摄像机的操作,在大多操作系统下,与摄像机交互是一件很复杂并且痛苦的工作,High GUI 提供了一种从摄像机中获取图像的简单方法,所有繁琐的工作都在High GUI 内部完成。

2)文件部分:主要工作是载入与保存图像文件。

3)图形用户界面部分:提供一些简单的函数用来打开窗口以及将图像显示在窗口中。

High GUI 函数实际被划分为“视频输入/输出”、“图像输入/输出”和“GUI工具”三部分,分别在 cvcap*,grfmt*和window*源文件中实现


窗口函数

// 创建窗口
int cvNameWindow(
    const char* name,
    int flags = CV_WINDOW_AUTOSIZE   // flags: 0 或者 CV_WINDOW_AUTOSIZE
);

// 销毁窗口
cvDestroyWIndow(name);

// 窗口名称和窗口句柄转换函数
void* cvGetWindowHandle(const char* name);
const char* cvGetWindowName(void* window_handle);

// 调整窗口大小
void cvResizeWindow(
    const char* name,
    int width,
    int height
);


载入图像

IplImage* cvLoadImage(
    const cahr* filename,
    int iscolor = CV_LOAD_IMAGE_COLOR // 取值:CV_LOAD_IMAGE_COLOR|CV_LOAD_IMAGE_GRAYSCALE|CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_UNCHANGED
);


/**
* 成功:1,失败:0
*/
int cvSaveImage(
    const char* filename,
    const CvArr* image
);

显示图像

void cvShowImage(
    const char* name,
    const CvArr* image
);

示例:

int main(int argc, char** argv)
{
    cvNameWindow(argv[1], 1);
    
    IplImage* img = cvLoadImage(argv[1]);
    
    cvShowImage( argv[1], img);
    
    while(1) {
        if(cvWaitKey(100) == 27) break;
    }
    
    cvDestroyWIndow(argv[1]);
    
    cvReleaseImage( &img);
    exit(0);
}

其他相关函数

void cvMoveWindow(const char* name, int x, int y);
void cvDestroyAllWindows(void);
int cvStartWindowThread(void);

鼠标事件

void CvMouseCallback(
    int event,
    int x, 
    int y,
    int flags,
    void* param
);

event 值:

事件名称数值
CV_EVENT_MOUSEMOVE0
CV_EVENT_LBUTTONDOWN1
CV_EVENT_RBUTTONDOWN2
CV_EVENT_MBUTTONDOWN3
CV_EVENT_LBUTTONUP4
CV_EVENT_RBUTTONUP
5
CV_EVENT_MBUTTONUP
6
CV_EVENT_LBUTTONDBLCLK
7
CV_EVENT_RBUTTONDBLCLK
8
CV_EVENT_MBUTTONDBLCLK
9

x, y 代表图像坐标位置

flags :

标志名称数值
CV_EVENT_FLAG_LBUTTON1
CV_EVENT_FLAG_RBUTTON2
CV_EVENT_FLAG_MBUTTON4
CV_EVENT_FLAG_CTRLKEY8
CV_EVENT_FLAG_SHIFTKEY16
CV_EVENT_FLAG_ALTKEY
32

注册回调函数

void cvSetMouseCallBack(
    const char* window_name,
    CvMouseCallback on_mouse,
    void* param = NULL
);


Sliders, Trackbars 和 Switches

int cvCreateTracker(
    const char* tracker_name,
    const char* window_name,
    int* value,
    int count,
    CvTrackbarCallback on_change
);

int cvGetTrackbarPos(
    const char* trackbar_name,
    const char* window_name
);

void cvSetTrackbarPos(
    const char* tracker_name,
    const char* window_name,
    int pos
);


视频处理

CvCapture* cvCreateFileCapture(const char* filename);
CvCapture* cvCreateCameraCapture(int index);
摄像机捕捉常数数值
CV_CAP_ANY0
CV_CAP_MIL100
CV_CAP_VFW200
CV_CAP_V4L200
CV_CAP_V4L2200
CV_CAP_FIREWIRE
300
CV_CAP_IEEE1394
300
CV_CAP_DC1394
300
CV_CAP_CMU1394
300

参数设置为 -1 时,OpenCV 会让用户选择摄像机。


读视频

int cvGrabFrame(CvCapture* capture);
IplImage* cvRetrieveFrame(CvCapture* capture);
IplImage* cvQueryFrame(CvCapture* capture);

cvReleaseCapture(CvCapture** capture);

double cvGetCaptureProperty (
    CvCapture* capture,
    int property_id
);

int cvSetCaptureProperty(
    CvCapture* capture,
    int property_id,
    double value
);
视频捕捉属性数值
CV_CAP_PROP_POS_MSEC0
CV_CAP_PROP_POS_FRAME1
CV_CAP_PROP_POS_AVI_RATIO2
CV_CAP_PROP_FRAME_WIDTH3
CV_CAP_PROP_FRAME_HEIGHT4
CV_CAP_PROP_FPS5
CV_CAP_FOURCC6
CV_CAP_PROP_FRAME_COUNT
7


写视频

CvVideoWriter* cvCreateVideoWriter (
    const char* filename,
    int fourcc,
    double fps,
    CvSize frame_size,
    int is_color = 1
);

int cvWriterFrame(
    CvVideoWriter* writer,
    const IplImage* image
);

void cvReleaseVideoWriter(
    CvVideoWriter** writer
);


ConvertImage函数

void cvConvertImage(
    const CvArr* src,
    CvArr* dst,
    it flags = 0  // 垂直旋转图像
);

用于在常用的不同图像格式之间转换。




标签: OpenCV C/C++
相关文章
评论留言
发布留言