【OpenCV学习记录】3.HighGUI——滚动条

本来还觉得滚动条功能没什么用处,结果今天调canny算子的参数突然发现这个功能的强大,可以实现实时调参,实时观察。
直接上代码:

// 滚动条测试
// 利用滚动条实时调整canny边缘提取算子的两个阈值参数,方便查找最佳参数
#include "pch.h"
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace std;
using namespace cv;
//全局图片变量
Mat image;
//滚动条参数
#define WINDOW_NAME "【滚动条试验】"//窗体名
#define BAR_NAME1 "Canny1"//滚动条1的名称
#define BAR_NAME2 "Canny2"//滚动条2的名称
#define BAR_NAME3 "Canny1_m"//滚动条3的名称
#define BAR_NAME4 "Canny2_m"//滚动条4的名称
const int CANNY_THESHOLD1_MAX = 200;//CANNY_THESHOLD1最大值
const int CANNY_THESHOLD2_MAX = 200;//CANNY_THESHOLD2最大值
const int CANNY_THESHOLD1_microMAX = 600;//CANNY_THESHOLD1微调量最大值
const int CANNY_THESHOLD2_microMAX = 600;//CANNY_THESHOLD2微调量最大值
int canny_theshold1_value = 5;//theshold1变量
int canny_theshold2_value = 10;//theshold2变量
int canny_theshold1_microvalue = 0;//theshold1微调变量
int canny_theshold2_microvalue = 0;//theshold2微调变量
//滚动条回调函数
void RunTrackBar(int, void*)
{
	Mat edge_enhanced_image;
	double canny1 = canny_theshold1_value + 0.01*canny_theshold1_microvalue - 3;
	double canny2 = canny_theshold2_value + 0.01*canny_theshold2_microvalue - 3;
	//Canny边缘增强
	Canny(image, edge_enhanced_image, canny1, canny2, 3);
	//图片输出
	imshow(WINDOW_NAME, edge_enhanced_image);
}
//滚动条试验
void TrackBarTest()
{
	//读取图片,灰度化模式
	image = imread("image.jpg", IMREAD_GRAYSCALE);
	//如果读取失败则报错
	if (!image.data)
		cout << "图片读取失败!" << endl;
	//3x3内核降噪
	blur(image, image, Size(3, 3));

	//创建窗体
	namedWindow(WINDOW_NAME, 1);
	//创建滚动条
	createTrackbar(BAR_NAME1, WINDOW_NAME, &canny_theshold1_value, CANNY_THESHOLD1_MAX, RunTrackBar);
	createTrackbar(BAR_NAME2, WINDOW_NAME, &canny_theshold2_value, CANNY_THESHOLD2_MAX, RunTrackBar);
	createTrackbar(BAR_NAME3, WINDOW_NAME, &canny_theshold1_microvalue, CANNY_THESHOLD1_microMAX, RunTrackBar);
	createTrackbar(BAR_NAME4, WINDOW_NAME, &canny_theshold2_microvalue, CANNY_THESHOLD2_microMAX, RunTrackBar);
	//回调函数
	RunTrackBar(1, 0);
	//等待用户按键
	waitKey(0);
}

int main()
{
	TrackBarTest();
	return 0;
}


运行结果:
在这里插入图片描述
移动滚动条位置后:
在这里插入图片描述
调试效果良好。
但是可以看到窗口宽度因为图片宽度而偏小,导致滚动条显示不完全,有待完善。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值