opencv学习(2)滑动条的创建和使用

滑动条的创建和使用

#include<opencv2/opencv.hpp>
#include"opencv2/highgui/highgui.hpp"
using namespace cv;

const String WINDOW_NAME = "【线性混合案例】";
const int g_nMaxAlphaValue = 100;
int g_nAlphaValueSlider;
double g_dAlphaValue;
double g_dBetaValue;

//声明存储图像的变量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;

void on_Trackbar(int, void*)
{
    g_dAlphaValue = (double)g_nAlphaValueSlider / g_nMaxAlphaValue;
    g_dBetaValue = 1.0 - g_dAlphaValue;
    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("3.jpg");
    g_srcImage2 = imread("4.jpg");

    resize(g_srcImage1,g_srcImage1,Size(640, 640), 0, 0, CV_INTER_LINEAR);
    resize(g_srcImage2, g_srcImage2, Size(640, 640), 0, 0, CV_INTER_LINEAR);

    if (!g_srcImage1.data){ printf("读取第一张照片有误"); return-1; }
    if (!g_srcImage2.data){ printf("读取第二张照片有误"); return-1; }

    g_nAlphaValueSlider = 70;
    namedWindow(WINDOW_NAME,1);

    //在创建的窗体中创建一个滑动条控制
    char TrackbarName[50];
    sprintf(TrackbarName, "透明值 %d", g_dAlphaValue);//把格式化的数据写入某个字符串缓冲区
    createTrackbar(TrackbarName,WINDOW_NAME,&g_nAlphaValueSlider,g_nMaxAlphaValue,on_Trackbar);
    on_Trackbar(g_nAlphaValueSlider, 0);

    waitKey(0);
    return 0;
}

备注:
(1)创建滑动条:createTrackbar( )函数;往往会跟一个回调函数配合起来使用

 int careateTrackbar(conststring& trackbarname,constring& winname, int* value,int count,TrackbarCallback onChange=0,void* userdata=0 )

第一个参数 【轨迹条的名字】
第二个参数【窗口的名字】
第三个参数,int*类型的value,是一个指向整型的指针,表示滑块的位置。
第四个参数,表示滑块能够达到的最大位置的值;
第五个参数,TrackbarCallback类型的onChange,它有默认值0;这是一个指向回调函数的指针,每次滑块位置改变时,这个函数就会进行回调。
第六个参数,void*类型的userdata,它有默认值0.这个参数是用户传给回调函数的数据,用来处理轨迹条事件。
【回调函数】就是一个通过函数指针调用的函数。如果我们把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就称为回调函数。
(2) resize()函数;将两幅将要合成的图像尺寸变为指定的大小。

resize(g_srcImage1,g_srcImage1,Size(640, 640), 0, 0, CV_INTER_LINEAR);

(3)sprintf()函数,把格式化的数据写入摸个字符串缓冲区;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值