学习opencv_学习笔记三

本文详细介绍了OpenCV中的HighGUI模块,包括窗口管理、图像加载显示、鼠标事件处理、滑动条操作等内容,并通过示例代码展示了如何创建窗口、显示和操作图像、设置鼠标回调以及创建滑动条。此外,还简要提到了视频处理的基本操作,如读取视频帧。
摘要由CSDN通过智能技术生成

第四章 细说HighGUI

一个可移植的图形工具包

由以下三部分组成:

硬件部分

文件部分

图形用户界面

1创建窗口

所用到函数:

/* create window 创建窗口*/

CVAPI(int) cvNamedWindow( const char* name, //窗口名称

int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) );//根据图像自动调整大小

 

/* destroy window and all the trackers associated with it 销毁窗口 */

CVAPI(void) cvDestroyWindow( const char* name );//窗口名称

 

/* get native window handle (HWND in case of Win32 and Widget in case of X Window) */

//窗口系统,windows下返回HWND

CVAPI(void*) cvGetWindowHandle( const char* name );

 

/* get name of highgui window given its native handle  取得窗口名称*/

CVAPI(const char*) cvGetWindowName( void* window_handle );

 

/* resize/move window 调整窗口大小*/

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

//移动窗口 ,xy为左上角坐标

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

 

示例代码如下:

#include <opencv2\opencv.hpp>

using namespace cv;

int main(int argc,char** argv) {

//创建窗口

cvNamedWindow("test");

//调整窗口大小

cvResizeWindow("test",800,600);

 

//移动窗口

cvMoveWindow("test", 80, 80);

 

//等待用户按键

cvWaitKey();

//释放窗口

cvDestroyWindow("test");

}

2载入图像

所用到函数

//载入图像

CVAPI(IplImage*) cvLoadImage( const char* filename, // 文件名

int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));//

 

Iscolor的常量值

/* 8bit, color or not */

    CV_LOAD_IMAGE_UNCHANGED  =-1,

/* 8bit, gray */

    CV_LOAD_IMAGE_GRAYSCALE  =0, //单通道

/* ?, color */

    CV_LOAD_IMAGE_COLOR      =1, //三通道

/* any depth, ? */

    CV_LOAD_IMAGE_ANYDEPTH   =2,//非8位图像

/* ?, any color */

    CV_LOAD_IMAGE_ANYCOLOR   =4 //原始通道读入

 

 

//保存图像

/* save image to file */

CVAPI(int) cvSaveImage( const char* filename, //文件名

const CvArr* image, //图像数组,

                        const int* params CV_DEFAULT(0) );

 

3显示图像

/* display image within window (highgui windows remember their content) */

CVAPI(void) cvShowImage( const char* name, //窗口名称

const CvArr* image );//图像 IplImage*

 

//关闭所有窗口,释放内存

CVAPI(void) cvDestroyAllWindows(void);

 

//创建线程,处理窗口更新

CVAPI(int) cvStartWindowThread( void );

 

//等待用户按键,为0时无限等待

/* wait for key event infinitely (delay<=0) or for "delay" milliseconds */

CVAPI(int) cvWaitKey(int delay CV_DEFAULT(0));

 

示例代码如下:

 

 

 

 

鼠标事件

//回调函数的格式

typedef void (CV_CDECL *CvMouseCallback )(int event, //事件类型

int x, //事件发生时鼠标位置

int y,

int flags, //事件发生时的不同状态

void* param); //额外参数

 

Event的取值:

CV_EVENT_MOUSEMOVE      =0,

    CV_EVENT_LBUTTONDOWN    =1,

    CV_EVENT_RBUTTONDOWN    =2,

    CV_EVENT_MBUTTONDOWN    =3,

    CV_EVENT_LBUTTONUP      =4,

    CV_EVENT_RBUTTONUP      =5,

    CV_EVENT_MBUTTONUP      =6,

    CV_EVENT_LBUTTONDBLCLK  =7,

    CV_EVENT_RBUTTONDBLCLK  =8,

    CV_EVENT_MBUTTONDBLCLK  =9,

    CV_EVENT_MOUSEWHEEL     =10,

CV_EVENT_MOUSEHWHEEL    =11

 

Flag的取值

CV_EVENT_FLAG_LBUTTON   =1,

    CV_EVENT_FLAG_RBUTTON   =2,

    CV_EVENT_FLAG_MBUTTON   =4,

    CV_EVENT_FLAG_CTRLKEY   =8,

    CV_EVENT_FLAG_SHIFTKEY  =16,

CV_EVENT_FLAG_ALTKEY    =32

 

//注册回调函数

/* assign callback for mouse events */

CVAPI(void) cvSetMouseCallback( const char* window_name, //窗体名称

CvMouseCallback on_mouse,//回调函数

                                void* param CV_DEFAULT(NULL));//额外信息

 

示例代码:

#include <opencv2\opencv.hpp>

using namespace cv;

//鼠标在窗口中画方形的程序

 

//函数声明

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),

opencv_contrib是一个包含了一些额外功能和模块的开源计算机视觉库。它包含了一些不在主要OpenCV库中的功能,比如SIFT特征等。为了使用这些额外功能,你需要重新编译OpenCVopencv_contrib。首先,你需要下载opencv_contrib的源码,并将其解压到你的OpenCV文件夹下。然后,根据你的配置和需求,使用CMake重新编译OpenCVopencv_contrib。具体的安装和配置步骤可以参考相关的教程和文档。\[2\]\[3\] #### 引用[.reference_title] - *1* [Opencv(C++)系列学习---opencv_contrib安装](https://blog.csdn.net/qiaodahua/article/details/127987767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [opencv_contrib安装笔记](https://blog.csdn.net/weijifen000/article/details/93377143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [opencv_contrib安装教程](https://blog.csdn.net/weixin_51229250/article/details/120110646)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值