OpenCV 学习笔记
day6-滚动条操作演示用来调整图像亮度
函数
//定义
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;
}
效果
-
原图显示
-
滚动条初始显示
-
滚动条左滑显示
-
滚动条右滑显示