opencv程序十一:鼠标绘图
来源:互联网 发布:无忧seo博客 编辑:程序博客网 时间:2024/04/29 14:04
根据第一篇创建工程并添加两个文件
程序如下:
// 17MouseDraw.cpp : 定义控制台应用程序的入口点。//鼠标绘图,按下‘r’键可以重新绘图,按下‘s’键则保存图片到磁盘中#include "stdafx.h"#include <opencv2/opencv.hpp> using namespace std; #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") const char *pstrWindowsMouseDrawTitle = "鼠标绘图"; // 鼠标消息的回调函数 void on_mouse(int event, int x, int y, int flags, void* param) { static bool s_bMouseLButtonDown = false; static CvPoint s_cvPrePoint = cvPoint(0, 0); switch (event) { case CV_EVENT_LBUTTONDOWN: s_bMouseLButtonDown = true; s_cvPrePoint = cvPoint(x, y); break; case CV_EVENT_LBUTTONUP: s_bMouseLButtonDown = false; break; case CV_EVENT_MOUSEMOVE: if (s_bMouseLButtonDown) { CvPoint cvCurrPoint = cvPoint(x, y); cvLine((IplImage*)param, s_cvPrePoint, cvCurrPoint, CV_RGB(0, 0, 20), 3); s_cvPrePoint = cvCurrPoint; cvShowImage(pstrWindowsMouseDrawTitle, (IplImage*)param); } break; } } int main() { const int MAX_WIDTH = 500, MAX_HEIGHT = 400; const char *pstrSaveImageName = "MouseDraw.jpg"; IplImage *pSrcImage = cvCreateImage(cvSize(MAX_WIDTH, MAX_HEIGHT), IPL_DEPTH_8U, 3); cvSet(pSrcImage, CV_RGB(255, 255, 255)); //可以用cvSet()将图像填充成白色 cvNamedWindow(pstrWindowsMouseDrawTitle, CV_WINDOW_AUTOSIZE); cvShowImage(pstrWindowsMouseDrawTitle, pSrcImage); cvSetMouseCallback(pstrWindowsMouseDrawTitle, on_mouse, (void*)pSrcImage); int c; do{ c = cvWaitKey(0); switch ((char)c) { case 'r': cvSet(pSrcImage, CV_RGB(255, 255, 255)); cvShowImage(pstrWindowsMouseDrawTitle, pSrcImage); break; case 's': cvSaveImage(pstrSaveImageName, pSrcImage); break; } }while (c > 0 && c != 27); cvDestroyWindow(pstrWindowsMouseDrawTitle); cvReleaseImage(&pSrcImage); return 0; }
一.关键函数
1.1 cvSetMouseCallback
函数功能:设置处理鼠标消息的回调函数
函数原型:
/* assign callback for mouse events */
CVAPI(void) cvSetMouseCallback(
const char* window_name,
CvMouseCallback on_mouse,
void* param CV_DEFAULT(NULL)
);
函数说明:
第一个参数表示窗口名称。
第二个参数表示鼠标消息的消息处理函数。
第三个参数表示用户定义传入鼠标指定消息处理函数的参数。
1.2 CvMouseCallback
函数功能:鼠标消息的回调函数
函数原型:
typedef void (CV_CDECL *CvMouseCallback )(int event, int x, int y, int flags, void* param);
函数说明:
第一个参数表示鼠标消息类型,取值如下:
enum
{
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
};
第二,三个参数表示鼠标的坐标。
第四个参数表示附加事件,取值如下:
enum
{
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
};
第五个参数即设置cvSetMouseCallback()中将接收到的参数。
运行效果如下图所示:
- opencv程序十一:鼠标绘图
- Opencv鼠标绘图程序
- opencv 鼠标绘图
- Opencv做鼠标绘图
- opencv窗口鼠标绘图
- 利用opencv进行鼠标绘图
- opencv学习(十一)之绘图函数
- OpenCV对鼠标绘图的支持
- 【OpenCV入门指南】第十一篇 鼠标绘图
- 【OpenCV入门指南】第十一篇 鼠标绘图
- 【OpenCV入门指南】第十一篇 鼠标绘图
- 【OpenCV入门指南】第十一篇 鼠标绘图
- 【OpenCV入门指南】第十一篇 鼠标绘图
- 【OpenCV入门指南】第十一篇 鼠标绘图
- python opencv入门 鼠标绘图(4)
- 【OpenCV入门指南】第十一篇 鼠标绘图
- OpenCV学习笔记4-鼠标绘图
- OpenCV中文网站例程——鼠标绘图,图像修复
- Mac下配置Vim
- 数据库—小知识点
- 为SEO菜鸟们送上几年心血总结出的十点网站推广经验
- 为SEO菜鸟们送上几年心血总结出的十点网站推广经验
- 为SEO菜鸟们送上几年心血总结出的十点网站推广经验
- opencv程序十一:鼠标绘图
- 为SEO菜鸟们送上几年心血总结出的十点网站推广经验
- ASP.NET自学过程——发送邮件
- NSData 与NSString,Byte数组,UIImage,int的相互转换
- 为SEO菜鸟们送上几年心血总结出的十点网站推广经验
- 智能家居:一种移动终端的投影应用程序界面的新功能-设计概要
- TestNG 入门教程
- 关于typedef int (*ADDPROC)(int a, int b)
- Boost.Asio c++ 网络编程翻译(11)