OpenCV鼠标事件

使用本代码可以打印出鼠标所在的坐标和像素大小(黑白图片)

使用函数setMouseCallback,输入参数1是窗口名字,输入参数2是调用的函数。

语言是C++,OpenCV版本是3.1.0。

#include "opencv2/core.hpp"
#include <opencv2/core/utility.hpp>
#include "opencv2/imgproc.hpp"
#include "opencv2/calib3d.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/videoio.hpp"
#include "opencv2/highgui.hpp"

#include<iostream>
 
using namespace cv;
using namespace std;
 
void OnMouseAction(int event,int x,int y,int flags,void *ustc);  //鼠标回调事件函数
int static times; //记录调用次数
 
Mat  image;

int main(int argc,char*argv[])
{
	image=imread("left01.jpg", IMREAD_GRAYSCALE);
	imshow("image",image);
	setMouseCallback("image",OnMouseAction);
	waitKey();
	system("pause");
}
 
//*******************************************************************//
//鼠标回调函数
 
void OnMouseAction(int event,int x,int y,int flags,void *ustc)
{	
	//cout<<"第 "<<times<<" 次回调鼠标事件"<<endl;

	if(event==CV_EVENT_LBUTTONDOWN)
	{
		cout<<"触发左键按下事件"<<endl;
		cout<<"location: "<<x<<", "<<y<<endl;

		unsigned char* row_ptr = image.ptr<unsigned char> ( y );  // row_ptr是第y行的头指针
		unsigned char* data_ptr = &row_ptr[ x*image.channels() ]; // data_ptr 指向待访问的像素数据
		// 输出该像素的每个通道,如果是灰度图就只有一个通道
		for ( int c = 0; c != image.channels(); c++ )
		{
			unsigned char data = data_ptr[c]; // data为I(x,y)第c个通道的值
			cout << (int)data << endl;
		}		
	}
	/*
	if(event==CV_EVENT_MOUSEMOVE)
	{
		cout<<"触发鼠标移动事件"<<endl;
	}
	if(event==CV_EVENT_LBUTTONUP)
	{
		cout<<"触发左键抬起事件"<<endl;
	}
	if(event==CV_EVENT_RBUTTONDOWN)
	{
		cout<<"触发右键按下事件"<<endl;
	}
	if(event==CV_EVENT_RBUTTONUP)
	{
		cout<<"触发右键抬起事件"<<endl;
	}
	if(event==CV_EVENT_LBUTTONDBLCLK)
	{
		cout<<"触发左键双击事件"<<endl;
	}
	if(event==CV_EVENT_RBUTTONDBLCLK)
	{
		cout<<"触发右键双击事件"<<endl;
	}*/
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值