opencv 图形用户界面 鼠标滑块事件

该程序展示了如何在OpenCV中创建一个带有滑块的GUI,用于调整图像的模糊程度。当用户移动滑块时,图像会实时更新以显示新的模糊效果。同时,程序还添加了鼠标点击事件,当用户点击图像时,会在点击点绘制一个绿色圆圈。这展示了OpenCV的交互式图像处理能力。
摘要由CSDN通过智能技术生成

opencv

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

// OpenCV includes
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;

// 创建一个变量以保存轨迹中的位置值
int blurAmount = 15;

//轨迹栏回调功能
static void onChange(int pos, void* userInput);

//鼠标回调
static void onMouse(int event, int x, int y, int, void* userInput);

int main(int argc, const char** argv)
{
	// 读取图片
	Mat lena = imread("D:\\opencvLearn\\Chapter_03/lena.jpg");

	//创建窗口
	namedWindow("Lena");

	//创建滑块 参数说明: 1跟踪条名称 2窗口名称 3整数指针 可选 4滑块上最大的位置 5滑块变化的回调函数 6要发送到回调函数的用户数据
	createTrackbar("Lena", "Lena", &blurAmount, 30, onChange, &lena);
	//添加鼠标事件
	setMouseCallback("Lena", onMouse, &lena);

	// 初始化图片
	onChange(blurAmount, &lena);


	waitKey(0);

	// 释放窗口
	destroyWindow("Lena");

	return 0;
}

//回调函数处理
static void onChange(int pos, void* userInput)
{
	if (pos <= 0)
		return;
	Mat imgBlur;

	// 传回的值 转为矩阵
	Mat* img = (Mat*)userInput;

	//模糊过滤器  Size(pos, pos)说明:该参数是 想要应用的模糊内核大小
	blur(*img, imgBlur, Size(pos, pos));

	
	imshow("Lena", imgBlur);
}

//鼠标事件处理
static void onMouse(int event, int x, int y, int, void* userInput)
{	
	//只处理单击鼠标左键事件
	if (event != EVENT_LBUTTONDOWN)
		return;

	// 获取矩阵
	Mat* img = (Mat*)userInput;

	// 画圆
	circle(*img, Point(x, y), 10, Scalar(0, 255, 0), 3);

	// 回调函数处理
	onChange(blurAmount, img);

}

图形用户界面 鼠标滑块事件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值