【基于C++和Python的Opencv3学习笔记之滑动条的使用】

毛星云的《opencv3编程入门》中经常使用滑动条Trackbar来调节参数,是一个很好的实用工具,可以达到替代按钮的作用。

创建滑动条:creatTrackbar()函数

creatTrackbar()函数可以创建一个滑动条,并将滑动条放置在指定的窗口上,它往往配合一个回调函数一起使用,函数原型如下:

int createTrackbar(const string& trackname, const string& winname, int *value, int count, TrackbarCallback onChange=0, void *userdata=0)

Trackname是创建的滑动条的名字,winname是放置滑动条的窗口名称,value是一个指向整型的指针,表示滑块所处的位置,count是滑块能达到的最大位置,滑块的最小位置始终为0,onChange是TrackbarCallback类型的指向回调函数的指针,每次滑块位置改变就会调用回调函数,且这个回调函数的原型必须是void XXXX(int, void*)userdata是用户传给回调函数的数据,如果value实参是全局变量的话,则不用管这个参数。

回调函数

所谓回调函数就是通过函数指针调用的函数,如果我们将函数的地址作为参数传递给另一个函数,则当这个指针被用来调用其所指向的函数时,就称为回调函数。需要注意的是:回调函数不是由该函数的实现方直接调用,而是在特定的事件触发的时候由另一方调用。


代码示例(基于C++)

#include "stdafx.h"
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>

using namespace std;
using namespace cv;

# define WINDOW_NAME "滑动条的创建及使用"

//全局变量的声明
const int g_MaxSliderValue = 100;
int g_SliderValue;
double g_Alpha;
double g_Beta;

Mat img1;
Mat img2;
Mat dstImg;

void on_Track(int, void*)
{
	g_Alpha = (double)g_SliderValue / g_MaxSliderValue;
	g_Beta = 1.0 - g_Alpha;
	addWeighted(img1, g_Alpha, img2, g_Beta, 0.0, dstImg);
	imshow(WINDOW_NAME, dstImg);
}

int _tmain(int argc, _TCHAR* argv[])
{
	img1 = imread("1.jpg");
	img2 = imread("2.jpg");

	//设置初始滑动条位置
	g_SliderValue = 20;

	// 创建窗口
	namedWindow(WINDOW_NAME);

	char TrackName[50];
	sprintf(TrackName, "透明度:%d", g_MaxSliderValue);

	// 创建滑动条
	createTrackbar(TrackName, WINDOW_NAME, &g_SliderValue, g_MaxSliderValue, on_Track);

	// 结果在回调函数中显示
	on_Track(g_SliderValue, 0);

	waitKey(0);
	return 0;
}



代码示例(基于Python


# coding=UTF-8
import numpy as np
import cv2

trackname = 'transparency'
winname = 'result'
g_MaxSlider = 100
g_SlierValue = 60


def on_Track(arg):
    '''

    :param arg:
    :return:
    '''
    # Python中必须加入getTrackbarsPos()函数来获取滑动块的位置
    g_SlierValue = cv2.getTrackbarPos(trackname, winname)
    g_Alpha = float(g_SlierValue) / g_MaxSlider
    g_Beta = 1.0 - g_Alpha
    dstImg = cv2.addWeighted(img1, g_Alpha, img2, g_Beta, 0.0)
    cv2.imshow(winname, dstImg)


if __name__ =='__main__':

    img1 = cv2.imread('1.jpg')
    img2 = cv2.imread('2.jpg')

    # 创建窗口
    cv2.namedWindow(winname)

    # 创建滑动条
    cv2.createTrackbar(trackname, winname, g_SlierValue, g_MaxSlider, on_Track)

    # 将结果显示在回调函数中显示
    on_Track(g_SlierValue)
    cv2.waitKey(0)







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值