栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Opencv -- 007滚动条操作演示 - 参数传递度

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Opencv -- 007滚动条操作演示 - 参数传递度

滚动条操作 – 对比度

addWeighted函数利用公式 dst = src1 * alpha + src2 * beta + gamma; 来计算两个数组(图像)的加权和,换句话说就是两个图像按照一定比例融合,然后生成新的图像。

06_opencv_mat.h

#pragma once

#ifndef _06_OPENCV_MAT_H
#define _06_OPENCV_MAT_H

#include 

using namespace cv;

struct contrast_parm {
	double alpha;
	double beta;
	double gamma;
};

class QuickDemo {
public:
	//滚动条
	void tracking_bar_demo(Mat& image);
};

#endif

06_opencv_mat.cpp

#include 
#include "06_opencv_mat.h"

using namespace std;

static void on_track(int pos, void* userdata)
{
	struct contrast_parm cp;
	cp.alpha = pos / 50.0; // 0 -- 2
	cp.beta = 0.0;
	cp.gamma = 0.0;
	Mat src =  *((Mat*)userdata);
	Mat dst =  Mat::zeros(src.size(), src.type());
	Mat temp = Mat::zeros(src.size(), src.type());
	temp = Scalar(pos, pos, pos);
	
	

	
	addWeighted(src, cp.alpha,temp, cp.beta, cp.gamma,dst);

	imshow("对比度调整", dst);
}

void QuickDemo::tracking_bar_demo(Mat &image)
{
	namedWindow("对比度调整", WINDOW_AUTOSIZE);

	//我希望滚动条的调整范围在 0 - 100 之间
	//不用设置最小值,默认就是0 - 100
	int contrast_value = 0; //初始值设置为0
	int max_value = 100;
	
	//参数1 - 给这个滚动条设置一个名字
	//参数2 - 滚动条显示在哪个窗体
	//参数3 - 通过哪个值来控制,需要传地址过去
	//参数4 - 调整的范围是多少,即最大值是多少,最小值为0
	//参数5 - 是一个回调函数, TrackbarCallback onChange = 0,默认为NULL(0),
	// typedef void (*TrackbarCallback)(int pos, void* userdata);
	// 当我们滑动滚动条时,就会产生一个事件(Trackbar Change),系统会捕捉这个事件,
	// 然后调用我们写的回调函数TrackbarCallback
	//参数6 - void* userdata = 0,是否需要它携带一个外带的数据,这个数据可以是你自己定义的,由void*修饰
	createTrackbar("Value Bar:", "对比度调整", &contrast_value, max_value, on_track,(void*)(&image));
	on_track(contrast_value,&image);
}

main.c

#include 
#include "06_opencv_mat.h"

using namespace std;

int main(int argc,char** argv)
{
    //使用Mat(matrix -- 矩阵)这种类型来读取通过指定路径的图像信息并存放到变量picture中。
    //图像从本质上来说都是二维的数组(矩阵)
    Mat picture = imread("雪地.jpeg", IMREAD_COLOR);

    if (picture.empty())
    {
        cout << "could not Load image." << endl;
        system("pause");
        return -1;
    }
    
    // namedWindow("输入窗口",WINDOW_FREERATIO);
   
    imshow("输入窗口", picture);

    QuickDemo qd;
    qd.tracking_bar_demo(picture);

    waitKey(0);
    destroyAllWindows();

    system("pause");
    return 0;
}

运行程序:
注意:这里我只控制一个参数alpha,其他两个参数我都让它为0了。
初始时,

滑动到中间

100%

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/605256.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号