opencv鼠标事件和滑条操作

鼠标事件 在这里插入图片描述

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

在这里插入图片描述

/*
Mat img(500, 500, CV_8UC3, Scalar(255, 255, 255));//定义全局变量

void OnMouse(int event, int x, int y, int flags, void* param) {

	if (event == CV_EVENT_LBUTTONDOWN)//如果鼠标按下
	{
		cout << "mouse down" << endl;//控制台输出
		circle(img, Point(x, y), 80, Scalar(255, 255, 0), 2, 8);//在img上画圆
	}
}
void main() {
	namedWindow("mouse", CV_WINDOW_AUTOSIZE);
	setMouseCallback("mouse", OnMouse, 0);

	while (1) {
		imshow("mouse", img);
		if (27 == waitKey(10))//每隔10ms检测按时是否按下
			break;
	}

}
*/
/*将Mat img设置为指针传入
Point pt;
void OnMouse(int event, int x, int y, int flag, void* param) {
	Mat img = *(Mat*)param;//将param强制转换为Mat指针,*(Mat*)=Mat, 类比*(int*)= int一样
	switch (event)
	{
	case CV_EVENT_LBUTTONDOWN: //鼠标左键按下时
		pt.x = x;
		pt.y = y;
		break;
	case CV_EVENT_LBUTTONUP: //鼠标左键抬起时
		rectangle(img, pt, Point(x, y), Scalar(0, 255, 0), 2, 8);
		break;
	default:
		break;
	}
}

void main()
{
	Mat img(500, 500, CV_8UC3, Scalar(255, 255, 255));
	namedWindow("mouse", CV_WINDOW_AUTOSIZE);
	setMouseCallback("mouse", OnMouse, &img);//传入img地址这样就不必将img设置为全局变量

	while (1) {
		imshow("mouse", img);
		if (27 == waitKey(10))
			break;
	}
}

在这里插入图片描述

滑条操作

在这里插入图片描述

Mat dst;
int value = 20;

void onChange(int, void* param) {
	Mat src = *(Mat*)param;
	threshold(src, dst, value, 255, THRESH_BINARY);//二值化
	imshow("TrackBar", dst);
}

void main() {
	Mat src = imread("../source/1.jpg", 0);//读入灰度图像
	namedWindow("TrackBar", CV_WINDOW_AUTOSIZE);
	createTrackbar("Threshold", "TrackBar", &value, 255, onChange, &src);


	threshold(src, dst, value, 255, THRESH_BINARY);
	imshow("TrackBar", dst);
	waitKey(0);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值