【火同学】OPencv学习笔记——滑动条的创建和使用

Opencv中的滑动条的创建和使用

Ps:素材来源:opencv编程,目的是记录自己的学习过程。

一,创建滑动条:createTrackbar()

1)createTrackbar()函数是用来创建一个具有特定名称和范围的轨迹条。

  • 第一个参数,轨迹条的名字,用来代表我们创建的轨迹条。
  • 第二个参数,窗口的名字,表示轨迹条会依附在哪个窗口上。
  • 第三个参数,表示滑块的位置。
  • 第四个参数,表示滑块可以达到的最大位置的值。
  • 第五个参数,是指向回调函数的指针。
  • 第六个参数,用户传给回调函数的数据,默认值为0,假如第三个参数是全局变量则可不用管。
createTrackbar函数使用的小例子

createTrackbar(“对比度:”,“【效果窗口】”,"&g_nContrastValue",“300”,on_Change)

二,createTrackbar()与 Canny结合的具体使用
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>

using namespace cv;
using namespace std;
int thresholds = 50;
Mat image,srcimage;

void canny_track(int, void*)
{
	Mat result;
	Canny(srcimage, result, thresholds, thresholds * 3, 3);
	imshow("边缘检测", result);
}

int main()
{
	image = imread("dota.jpg");
	if (!image.data)
	{
		return 0;
	}
	cvtColor(image, srcimage, COLOR_BGR2GRAY);
	namedWindow("边缘检测", WINDOW_AUTOSIZE);
	createTrackbar("阈值", "边缘检测", &thresholds, 300, canny_track);
	waitKey(0);
	return 0;
}

效果展示
在这里插入图片描述

三,一个完整的例子,演示如何用轨迹条来控制两幅图像的Alpha的混合
#include<opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;

#define WINDOW_NAME "[线性混合示例]"   //窗口的宏定义

//--------------全局变量--------------//
const int g_nMaxAlphaValue = 100;//Alpha的最大值  
//alpha通道是一个8位的灰度通道,2^8=256,该通道用256级灰度来记录图片中的透明信息,定义透明、不透明和半透明区域,其中白表示不透明,黑表示透明,灰表示半透明。
int g_nAlphaValueSlider;//滑动条对应的变量
double g_dAlphaValue;
double g_dBetaValue;

//声明存储图像的变量
Mat g_srcimage1,g_srcimage2, g_dstImage;

void on_Trackbar(int,void*)
{
	//求出当前的Alpha值相对于最大值的比例
	g_dAlphaValue = (double)g_nAlphaValueSlider / g_nMaxAlphaValue;
	//则beta值为1减去alpha的值
	g_dBetaValue = (1 - g_dAlphaValue);

	//根据alpha和beta的值进行混合
	addWeighted(g_srcimage1, g_dAlphaValue, g_srcimage2, g_dBetaValue, 0.0, g_dstImage);
	//显示效果图

	imshow(WINDOW_NAME, g_dstImage);

}

int main(int argc,char** argv) {
	//加载两张一样大小的照片
	g_srcimage1 = imread("1.png");
	g_srcimage2 = imread("2.png");
	if (!g_srcimage1.data )
	{
		printf("第一张图片读取错误\n");
		return  -1;
	}
	if (!g_srcimage2.data)
	{
		printf("第二张图片读取错误\n");
		return  -1;
	}
	//设置滑动条的值为70
	g_nAlphaValueSlider = 70;
	//创建窗体
	namedWindow(WINDOW_NAME,WINDOW_NORMAL );

	//创建滑动条控件
	char TrackbarName[50];
	sprintf_s(TrackbarName, "透明值 %d", g_nMaxAlphaValue);
	createTrackbar(TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar);

	on_Trackbar(g_nAlphaValueSlider, 0);

	waitKey(0);
	return 0;
}


效果展示

在这里插入图片描述
图片资源:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值