HighGUI参考手册

    技术2022-05-13  12

    简单图形界面地址:http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_highgui.cn.htm

     

     


     

    cvNamedWindow

    创建窗口

    int cvNamedWindow( const char* name, int flags );

    name

    窗口的名字,它被用来区分不同的窗口,并被显示为窗口标题。

    flags

    窗口属性标志。目前唯一支持的标志是CV_WINDOW_AUTOSIZE。当这个标志被设置后,如果用户不能手动改变窗口大小,窗口大小会自动调整以适合被显示图像(参考cvShowImage)。

    函数cvNamedWindow创建一个可以放置图像和trackbar的窗口。被创建的窗口可以通过它们的名字被引用。

    如果已经存在这个名字的窗口,这个函数将不做任何事情。


    cvDestroyWindow

    销毁一个窗口

    void cvDestroyWindow( const char* name );

    name

    要被销毁的窗口的名字。

    函数cvDestroyWindow销毁指定名字的窗口。


    cvDestroyAllWindows

    销毁所有HighGUI窗口

    void cvDestroyAllWindows(void);

    函数cvDestroyAllWindows销毁所有已经打开的HighGUI窗口。


    cvResizeWindow

    设定窗口大小

    void cvResizeWindow( const char* name, int width, int height );

    name

    将被设置窗口的名字。

    width

    新的窗口宽度。

    height

    新的窗口高度。

    函数cvResizeWindow改变窗口的大小。


    cvMoveWindow

    设定窗口的位置

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

    name

    将被设置的窗口的名字。

    x

    窗口左上角的x坐标。

    y

    窗口左上角的y坐标。

    函数cvMoveWindow改变窗口的位置。


    cvGetWindowHandle

    通过名字获取窗口句柄

    void* cvGetWindowHandle( const char* name );

    name

    窗口名字。

    函数cvGetWindowHandle返回原始的窗口句柄(在Win32情况下返回HWND,GTK+情况下返回GtkWidget)


    cvGetWindowName

    通过句柄获取窗口的名字

    const char* cvGetWindowName( void* window_handle );

    window_handle

    窗口句柄。

    给定函数cvGetWindowName一个窗口的句柄(在Win32情况下是HWND,GTK+情况下是GtkWidget),函数返回窗口的名字。


    cvShowImage

    在指定窗口中显示图像

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

    name

    窗口的名字。

    image

    被显示的图像。

    函数cvShowImage 在指定窗口中显示图像。如果窗口创建的时候被设定标志CV_WINDOW_AUTOSIZE,那么图像将以原始尺寸显示;否则,图像将被伸缩以适合窗口大小。


    cvCreateTrackbar

    创建trackbar并将它添加到指定的窗口。

    CV_EXTERN_C_FUNCPTR( void (*CvTrackbarCallback)(int pos) ); int cvCreateTrackbar( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change );

    trackbar_name

    被创建的trackbar名字。

    window_name

    窗口名字,这个窗口将为被创建trackbar的父对象。

    value

    整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。

    count

    滑块位置的最大值。最小值一直是0。

    on_change

    每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void Foo(int); 如果没有回调函数,这个值可以设为NULL。

    函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。被创建的trackbar显示在指定窗口的顶端。


    cvGetTrackbarPos

    获取trackbar的位置

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

    trackbar_name

    trackbar的名字。

    window_name

    trackbar父窗口的名字。

    函数cvGetTrackbarPos返回指定trackbar的当前位置。


    cvSetTrackbarPos

    设置trackbar位置

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

    trackbar_name

    trackbar的名字。

    window_name

    trackbar父窗口的名字。

    pos

    新的位置。

    函数cvSetTrackbarPos设置指定trackbar的位置。


    cvSetMouseCallback

    设置鼠标事件的回调函数

    #define CV_EVENT_MOUSEMOVE 0 #define CV_EVENT_LBUTTONDOWN 1 #define CV_EVENT_RBUTTONDOWN 2 #define CV_EVENT_MBUTTONDOWN 3 #define CV_EVENT_LBUTTONUP 4 #define CV_EVENT_RBUTTONUP 5 #define CV_EVENT_MBUTTONUP 6 #define CV_EVENT_LBUTTONDBLCLK 7 #define CV_EVENT_RBUTTONDBLCLK 8 #define CV_EVENT_MBUTTONDBLCLK 9 #define CV_EVENT_FLAG_LBUTTON 1 #define CV_EVENT_FLAG_RBUTTON 2 #define CV_EVENT_FLAG_MBUTTON 4 #define CV_EVENT_FLAG_CTRLKEY 8 #define CV_EVENT_FLAG_SHIFTKEY 16 #define CV_EVENT_FLAG_ALTKEY 32 CV_EXTERN_C_FUNCPTR( void (*CvMouseCallback )(int event, int x, int y, int flags, void* param) ); void cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse, void* param=NULL );

    window_name

    窗口的名字。

    on_mouse

    指定窗口里每次鼠标时间发生的时候,被调用的函数指针。这个函数的原型应该为

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

    其中event是 CV_EVENT_*变量之一, x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系), flags是CV_EVENT_FLAG的组合, param是用户定义的传递到cvSetMouseCallback函数调用的参数。

    param

    用户定义的传递到回调函数的参数。

    函数cvSetMouseCallback设定指定窗口鼠标事件发生时的回调函数。详细使用方法,请参考opencv/samples/c/ffilldemo.c demo。


    cvWaitKey

    等待按键事件

    int cvWaitKey( int delay=0 );

    delay

    延迟的毫秒数。

    函数cvWaitKey无限制的等待按键事件(delay<=0时);或者延迟"delay"毫秒。返回值为被按键的值,如果超过指定时间则返回-1。

    注释:这个函数是HighGUI中唯一能够获取和操作事件的函数,所以在一般的事件处理中,它需要周期地被调用,除非HighGUI被用在某些能够处理事件的环境中。


    读取与保存图像


    cvLoadImage

    从文件中读取图像

    IplImage* cvLoadImage( const char* filename, int iscolor=1 );

    filename

    要被读入的文件的文件名。

    iscolor

    指定读入图像的颜色: 如果 >0,读入的图像将被强制转换为3通道彩色图像; 如果为 0, 读入的图像将被强制转换为灰度图像; 如果 <0, 读入的图像将与它本来颜色信息一样 (颜色通道数目由图像文件决定)。

    函数cvLoadImage从指定文件读入图像,返回读入图像的指针。目前支持如下文件格式:

    Windows位图文件 - BMP, DIB;JPEG文件 - JPEG, JPG, JPE;便携式网络图片 - PNG;便携式图像格式 - PBM,PGM,PPM;Sun rasters - SR,RAS;TIFF文件 - TIFF,TIF。

     


    cvSaveImage

    保存图像到文件

    int cvSaveImage( const char* filename, const CvArr* image );

    filename

    文件名。

    image

    要保存的图像。

    函数cvSaveImage保存图像到指定文件。图像格式的的选择依赖于filename的扩展名,请参考cvLoadImage。只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存。如果格式,深度或者通道不符合要求,请先用cvCvtScale 和cvCvtColor转换;或者使用通用的cvSave保存图像为XML或者YAML格式。


    视频读写函数


    CvCapture

    视频获取结构

    typedef struct CvCapture CvCapture;

    结构CvCapture 没有公共接口,它只能被用来作为视频获取函数的一个参数。


    cvCaptureFromFile

    初始化从文件中获取视频

    CvCapture* cvCaptureFromFile( const char* filename );

    filename

    视频文件名。

    函数cvCaptureFromFile给指定文件中的视频流分配和初始化CvCapture结构。

    当分配的结构不再使用的时候,它应该使用cvReleaseCapture函数释放掉。


    cvCaptureFromCAM

    初始化从摄像头中获取视频

    CvCapture* cvCaptureFromCAM( int index );

    index

    要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。

    函数cvCaptureFromCAM给从摄像头的视频流分配和初始化CvCapture结构。目前在Windows下可使用两种接口:Video for Windows(VFW)和Matrox Imaging Library(MIL); Linux下也有两种接口:V4L和FireWire(IEEE1394)。

    释放这个结构,使用函数cvReleaseCapture。


    cvReleaseCapture

    释放CvCapture结构

    void cvReleaseCapture( CvCapture** capture );

    capture

    视频获取结构指针。

    函数cvReleaseCapture释放由cvCaptureFromFile 或者cvCaptureFromCAM申请的CvCapture结构。


    cvGrabFrame

    从摄像头或者视频文件中抓取帧

    int cvGrabFrame( CvCapture* capture );

    capture

    视频获取结构指针。

    函数cvGrabFrame从摄像头或者文件中抓取帧。被抓取的帧在内部被存储。这个函数的目的是快速的抓取帧,这一点对同时从几个摄像头读取数据的同步是很重要的。被抓取的帧可能是压缩的格式(由摄像头/驱动定义),所以没有被公开出来。如果要取回获取的帧,请使用cvRetrieveFrame。


    cvRetrieveFrame

    取回由函数cvGrabFrame抓取的图像

    IplImage* cvRetrieveFrame( CvCapture* capture );

    capture

    视频获取结构。

    函数cvRetrieveFrame返回由函数cvGrabFrame 抓取的图像的指针。返回的图像不可以被用户释放或者修改。


    cvQueryFrame

    从摄像头或者文件中抓取并返回一帧

    IplImage* cvQueryFrame( CvCapture* capture );

    capture

    视频获取结构。

    函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。


    cvGetCaptureProperty

    获得视频获取结构的属性

    double cvGetCaptureProperty( CvCapture* capture, int property_id );

    capture

    视频获取结构。

    property_id

    属性标识。可以是下面之一:CV_CAP_PROP_POS_MSEC - 影片目前位置,为毫秒数或者视频获取时间戳CV_CAP_PROP_POS_FRAMES - 将被下一步解压/获取的帧索引,以0为起点CV_CAP_PROP_POS_AVI_RATIO - 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)CV_CAP_PROP_FRAME_WIDTH - 视频流中的帧宽度CV_CAP_PROP_FRAME_HEIGHT - 视频流中的帧高度CV_CAP_PROP_FPS - 帧率CV_CAP_PROP_FOURCC - 表示codec的四个字符 CV_CAP_PROP_FRAME_COUNT - 视频文件中帧的总数

    函数cvGetCaptureProperty获得摄像头或者视频文件的指定属性。

    译者注:有时候这个函数在cvQueryFrame被调用一次后,再调用cvGetCaptureProperty才会返回正确的数值。


    cvSetCaptureProperty

    设置视频获取属性

    int cvSetCaptureProperty( CvCapture* capture, int property_id, double value );

    capture

    视频获取结构。

    property_id

    属性标识符。可以是下面之一:CV_CAP_PROP_POS_MSEC - 从文件开始的位置,单位为毫秒CV_CAP_PROP_POS_FRAMES - 单位为帧数的位置(只对视频文件有效)CV_CAP_PROP_POS_AVI_RATIO - 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)CV_CAP_PROP_FRAME_WIDTH - 视频流的帧宽度(只对摄像头有效)CV_CAP_PROP_FRAME_HEIGHT - 视频流的帧高度(只对摄像头有效)CV_CAP_PROP_FPS - 帧率(只对摄像头有效)CV_CAP_PROP_FOURCC - 表示codec的四个字符(只对摄像头有效)

    value

    属性的值。

    函数cvSetCaptureProperty设置指定视频获取的属性。目前这个函数对视频文件只支持: CV_CAP_PROP_POS_MSEC, CV_CAP_PROP_POS_FRAMES, CV_CAP_PROP_POS_AVI_RATIO


    cvCreateVideoWriter

    创建视频文件写入器

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

    filename

    输出视频文件名。

    fourcc

    四个字符用来表示压缩帧的codec 例如,CV_FOURCC('P','I','M','1')是MPEG-1 codec, CV_FOURCC('M','J','P','G')是motion-jpeg codec等。 在Win32下,如果传入参数-1,可以从一个对话框中选择压缩方法和压缩参数。

    fps

    被创建视频流的帧率。

    frame_size

    视频流的大小。

    is_color

    如果非零,编码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。

    函数cvCreateVideoWriter创建视频写入器结构。


    cvReleaseVideoWriter

    释放视频写入器

    void cvReleaseVideoWriter( CvVideoWriter** writer );

    writer

    指向视频写入器的指针。

    函数cvReleaseVideoWriter结束视频文件的写入并且释放这个结构。


    cvWriteFrame

    写入一帧到一个视频文件中

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

    writer

    视频写入器结构。

    image

    被写入的帧。

    函数cvWriteFrame写入/附加到视频文件一帧。


    实用函数与系统函数


    cvInitSystem

    初始化HighGUI

    int cvInitSystem( int argc, char** argv );

    argc

    命令行参数个数。

    argv

    命令行参数数组。

    函数cvInitSystem初始化HighGUI。如果在第一个窗口被创建前这个函数不能被用户显式地调用,这个函数将以参数argc=0,argv=NULL隐式地被调用。在Win32下,没有必要显式调用这个函数。在X Window下,参数也许被用来自定义一个HighGUI窗口和控件的外观。


    cvConvertImage

    Converts one image to another with optional vertical flip

    void cvConvertImage( const CvArr* src, CvArr* dst, int flags=0 );

    src

    输入图像。

    dst

    目标图像。必须为单通道或者3通道8位图像。

    flags

    操作标志:CV_CVTIMG_FLIP - 垂直翻转图像。 CV_CVTIMG_SWAP_RB - 交换红蓝通道。 在OpenCV中,彩色图像的通道顺序是 BGR 然而在一些系统中,在显式图像之前通道顺序应该被翻转为 (cvShowImage能够自动转换)。

    函数cvConvertImage转换一幅图像到另一幅图像,如果需要的话可以垂直翻转图像。这个函数被cvShowImage使用。


    最新回复(0)