OpenCV 学习笔记-day6(滚动条操作演示用来调整图像亮度,createTrackbar() 创建滚动条函数)

day6-滚动条操作演示用来调整图像亮度

函数

  1. createTrackbar() 创建滚动条函数

//定义
CV_EXPORTS int createTrackbar(const String& trackbarname, const String& winname,int* value, int count,TrackbarCallback onChange = 0,void* userdata = 0);

参数 说明
trackbarname 创建的滚动条名称
winname 滚动条用于依附的图像窗口的名称
value 初始化阈值(滚动条的初始位置 指针类型)
count 滚动条的最大位置(即滚动条的刻度范围)最小的位置总是0
TrackbarCallback 回调函数,其定义如下:
typedef void (TrackbarCallback)(int pos, void userdata);
TrackbarCallback第一个参数pos: 滚动条位置
TrackbarCallback第二个参数userdata: 用户数据 类型为 void指针类型 传递时注意类型转换 可以传图像地址

第二个参数userdata定义: User data that is passed as is to the callback. It can be used to handle trackbar
events without using global variables

代码

quickopencv.h

#pragma once

#include <opencv2\highgui.hpp>

#include <opencv2\imgproc.hpp>

using namespace cv;
//定义类
class QuickDemo{
    
    
public:
	void colorSpace_Demo(Mat &image);//色彩空间转换函数2021-12-24
	void mat_creation_demo(Mat &image);//Mat对象与创建2021-12-27
	void pixel_vist_Demo(Mat &image);//图像像素的读写操作2022-1-3
	void operators_demo(Mat &image);//图像像素的算数操作2022-1-4
	void tracking_bar_demo(Mat &image);//滚动条操作演示2022-1-7

};

QuickDemo.cpp

#include <opencv2\highgui.hpp>

#include <opencv2\imgproc.hpp>

#include<quickopencv.h>

#include <iostream>
static void on_track(int lightness,void* userdata)
{
    
    
	Mat image = *((Mat*)userdata);//传过来的是void型的指针 要转换
	Mat dst = Mat::zeros(image.size(), image.type());
	Mat m = Mat::zeros(image.size(),image.type());
	m = Scalar(lightness, lightness, lightness);
	add(image, m, dst);
	imshow("亮度调整", dst);
}
void QuickDemo::tracking_bar_demo(Mat &image)
{
    
    
	namedWindow("原图", WINDOW_NORMAL);
	imshow("原图", image);
	namedWindow("亮度调整", WINDOW_FREERATIO);
	int lightness = 50;
	int max_value = 100;
	createTrackbar("Value Bar:","亮度调整",&lightness,max_value,on_track,(void*)(&image));//最后一个参数userdata 是void指针类型传递时要转换
	on_track(50,&image);
}

OpencvTest.cpp

#include <iostream>
//#include "opencv2\core.hpp"
//#include <opencv2\opencv.hpp>
#include <opencv2\highgui.hpp>
#include <opencv2\imgproc.hpp>
#include<quickopencv.h>

using namespace cv;
using namespace std;

int main()
{
    
    
	Mat scr = imread("D:\\学习\\OpenCV学习\\pictures\\image\\1.jpg");//打开一张图
	if (!scr.data == 1)//判空
		return -1;
	qd.tracking_bar_demo(scr);
	waitKey(0);
	return 0;
}

效果

  1. 原图显示
    原图

  2. 滚动条初始显示
    初始滑块位置为 lightness

  3. 滚动条左滑显示
    在这里插入图片描述

  4. 滚动条右滑显示
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44799835/article/details/122361593