opencv(c++/opencv):创建和使用滑动条

首先上效果图:
在这里插入图片描述
使用的平台是: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);


}

猜你喜欢

转载自blog.csdn.net/weixin_42755384/article/details/88143185