热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

matlab鼠标框选目标,OpenCV实现鼠标在图像上框选单目标和多目标

本文实例为大家分享了OpenCV实现鼠标框选并显示框选区域的具体代码,供大家参考,具体内容如下鼠标在图像上框选目标:1.用到鼠标回调函数2

本文实例为大家分享了OpenCV实现鼠标框选并显示框选区域的具体代码,供大家参考,具体内容如下

鼠标在图像上框选目标:

1. 用到鼠标回调函数

2. 回调函数里面分三部分

(1)鼠标按下左键

(2)鼠标按下的同时移动左键

(3)鼠标左键弹起

3. 图像显示的刷新

5ccc7d02b2d822e285587cdeec6d4d7b.png

31e5de73f2f3b1012b0b4c5c053401ad.png

单目标:

#include

#include

#include

IplImage* src = 0;

IplImage* tmp = 0;

void on_mouse( int event, int x, int y, int flags, void* ustc)

{

static CvPoint pre_pt = {-1,-1};

static CvPoint cur_pt = {-1,-1};

CvFont font;

cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA);//初始化字体

char temp[16];

if( (event == CV_EVENT_LBUTTONDOWN)&&(flags) )//鼠标左键按下时

{

sprintf(temp,"(%d,%d)",x,y);//格式化字符串

pre_pt = cvPoint(x,y);//获取当前点坐标值

cvPutText(src,temp, pre_pt, &font, cvScalar(0,0, 0, 255));//在图像是打印字符

cvCircle( src, pre_pt, 2,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );//在图像上画圆

cvShowImage( "src", src );

//cvCopy(src,tmp);//这句有没有,就是单目标和多目标的问题

}

else if( (event == CV_EVENT_MOUSEMOVE) && (flags & CV_EVENT_LBUTTONDOWN))

{//鼠标移动并且鼠标左键按下

sprintf(temp,"(%d,%d)",x,y);//格式化字符串

cur_pt = cvPoint(x,y);//获取当前点坐标值

cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));//在图像是打印字符

cvRectangle(src, pre_pt, cur_pt, cvScalar(0,255,0,0), 2, 8, 0 );//在图像上画矩形

cvShowImage( "src", src );

cvCopy(tmp,src);//将img复制到临时图像tmp上,用于实时显示

}

else if( event == CV_EVENT_LBUTTONUP )

{//鼠标左键弹起

sprintf(temp,"(%d,%d)",x,y);//字体格式化

cur_pt = cvPoint(x,y);//获取当前点坐标值

cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));//在图像是打印字符

cvCircle( src, cur_pt, 2,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );//在图像上画圆

cvRectangle( src, pre_pt, cur_pt, cvScalar(0,255,0,0), 2, 8, 0 );//在图像上画矩形

cvShowImage( "src", src );

}

}

int main()

{

src=cvLoadImage("lena.jpg",1);//读入图像

tmp=cvCloneImage(src);//复制图像到临时图像上

cvNamedWindow("src",1);//新建窗口

cvSetMouseCallback( "src", on_mouse, 0 );//注册鼠标响应回调函数

cvShowImage("src",src);//显示图像

cvWaitKey(0);//等待按键按下

cvDestroyAllWindows();//销毁所有窗口

cvReleaseImage(&src);//释放图像

cvReleaseImage(&tmp);//释放图像

return 0;

}

7dae6aab7881358112eb9cb141cb4644.png

多目标:

#include

#include

#include

IplImage* src = 0;

IplImage* tmp = 0;

void on_mouse( int event, int x, int y, int flags, void* ustc)

{

static CvPoint pre_pt = {-1,-1};

static CvPoint cur_pt = {-1,-1};

CvFont font;

cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA);//初始化字体

char temp[16];

if( (event == CV_EVENT_LBUTTONDOWN)&&(flags) )//鼠标左键按下时

{

sprintf(temp,"(%d,%d)",x,y);//格式化字符串

pre_pt = cvPoint(x,y);//获取当前点坐标值

cvPutText(src,temp, pre_pt, &font, cvScalar(0,0, 0, 255));//在图像是打印字符

cvCircle( src, pre_pt, 2,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );//在图像上画圆

cvShowImage( "src", src );

cvCopy(src,tmp);//这句有没有,就是单目标和多目标的问题

}

else if( (event == CV_EVENT_MOUSEMOVE) && (flags & CV_EVENT_LBUTTONDOWN))

{//鼠标移动并且鼠标左键按下

sprintf(temp,"(%d,%d)",x,y);//格式化字符串

cur_pt = cvPoint(x,y);//获取当前点坐标值

cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));//在图像是打印字符

cvRectangle(src, pre_pt, cur_pt, cvScalar(0,255,0,0), 2, 8, 0 );//在图像上画矩形

cvShowImage( "src", src );

cvCopy(tmp,src);//将img复制到临时图像tmp上,用于实时显示

}

else if( event == CV_EVENT_LBUTTONUP )

{//鼠标左键弹起

sprintf(temp,"(%d,%d)",x,y);//字体格式化

cur_pt = cvPoint(x,y);//获取当前点坐标值

cvPutText(src,temp, cur_pt, &font, cvScalar(0,0, 0, 255));//在图像是打印字符

cvCircle( src, cur_pt, 2,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );//在图像上画圆

cvRectangle( src, pre_pt, cur_pt, cvScalar(0,255,0,0), 2, 8, 0 );//在图像上画矩形

cvShowImage( "src", src );

}

}

int main()

{

src=cvLoadImage("lena.jpg",1);//读入图像

tmp=cvCloneImage(src);//复制图像到临时图像上

cvNamedWindow("src",1);//新建窗口

cvSetMouseCallback( "src", on_mouse, 0 );//注册鼠标响应回调函数

cvShowImage("src",src);//显示图像

cvWaitKey(0);//等待按键按下

cvDestroyAllWindows();//销毁所有窗口

cvReleaseImage(&src);//释放图像

cvReleaseImage(&tmp);//释放图像

return 0;

}

a2056573d6ff1d5e1c4cd67c6354632e.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。



推荐阅读
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
author-avatar
月舞B的啊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有