首先上效果图:
使用的平台是:Ubuntu16.0.4
opencv 版本:3.3.0
从效果来看,滑动条被放在了图片底部,不同的系统不同版本可能放置的位置是不一样的
python版本
- 创建滑动条
cv2.createTrackbar
- 获取滑动条位置
cv2.getTrackbarPos
import cv2
import numpy as np
# 添加新窗口
cv2.namedWindow('image')
filename = 'dog.jpeg'
img = cv2.imread(filename, 0)
# 创建滑块,注册回调函数 lambda x: None没有滑动时
cv2.createTrackbar('num', 'image', 0, 255, lambda x: None)
cv2.createTrackbar('测试1', 'image', 5, 30, lambda x: None)
cv2.createTrackbar('测试2', 'image', 10, 20, lambda x: None)
while (1):
num = cv2.getTrackbarPos("num", "image")
test1 = cv2.getTrackbarPos("测试1", "image")
test2 = cv2.getTrackbarPos("测试2", "image")
ret, thresh1 = cv2.threshold(img, num, 255, cv2.THRESH_BINARY)
cv2.imshow('image', thresh1)
print("测试1此时的数值是%f,%f" %(test1,test2))
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
c++版本
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <math.h>
using namespace std;
using namespace cv;
// 创建滑动条
#define WINDOW_NAME "线性混合实例" //定义一个宏,相当于是一个固定的名字
// 全局变量声明
const int g_nMaxAlaphaValue=100;//alapha的最大的值
int g_nAlaphaValueSlider;//滑动条对应的变量
double g_dAlaphaValue;
double g_dBetaValue;
//声明存储图像的变量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;
//--------响应滑动条的回调函数
void on_Trackbar(int,void*)
{
//求出当前alapha值相对于最大值的比例
g_dAlaphaValue=(double)g_nAlaphaValueSlider/g_nMaxAlaphaValue;
//则beta值为1减去alapha的值
g_dBetaValue=(1.0-g_dAlaphaValue);
//根据alapha和beta值进行线性混合
addWeighted(g_srcImage1,g_dAlaphaValue,g_srcImage2,g_dBetaValue,0.0,g_dstImage);
//显示效果图
imshow(WINDOW_NAME,g_dstImage);
}
//---------主函数
int main(int argc, char *argv[])
{
//加载图像
g_srcImage1=imread("/home/liuxin/桌面/opencv/dog.jpeg");
g_srcImage2=imread("/home/liuxin/桌面/opencv/canny.jpeg");
//设置滑动条初值为70
g_nAlaphaValueSlider=70;
//创建窗体
namedWindow(WINDOW_NAME,1);
//在创建的窗体中创建一个滑动条控件
char TrackbarName[50];
sprintf(TrackbarName,"透明值%d",g_nMaxAlaphaValue); //字符串格式化
createTrackbar(TrackbarName,WINDOW_NAME,&g_nAlaphaValueSlider,g_nMaxAlaphaValue,on_Trackbar);
//结果在回调函数中显示
on_Trackbar(g_nAlaphaValueSlider,0);
while(1)
{
int key=cvWaitKey(10);
if (key==27)
{
break;
}
}
return(0);
}