赞
踩
首先感谢@浅墨_毛星云,本篇博文是小武通过学习@浅墨_毛星云的博客以及书籍《opencv3.0编程入门》整理的笔记及疑问心得,小武水平有限,欢迎交流。
@浅墨_毛星云博文:https://blog.csdn.net/poem_qianmo/article/details/21479533
函数: createTrackbar();
官网函数解析:
官网例程(含程序):
https://docs.opencv.org/2.4/doc/tutorials/highgui/trackbar/trackbar.html?highlight=createtrackbar
亮度对比度调节原理:
g(x,y)=delta*f(x,y)+yeta
delta越大,对比度越大,yeta越大,亮度越大。
实现代码:
- //添加头文件
- #include<opencv2/core/core.hpp>
- #include<opencv2/highgui.hpp>
- #include<opencv2/imgproc.hpp>
- #include<iostream>
-
- using namespace std;
- using namespace cv;
- //函数声明
- void callback_tracker(int,void*);
-
- //全局变量声明
- int contrast_rat;
- int bright_val;
- Mat lenna_1;
- Mat lenna_2;
-
- //主函数
- int main ()
- {
- system("color5F"); //改变控制台前景色和背景色(可要可不要)
-
- //读取图片
- lenna_1=imread("lenna.jpg");
-
- //创建一个和原始图像同大小,同类型的图像,使用Mat类的zeros功能
- lenna_2=Mat::zeros(lenna_1.size(),lenna_1.type());
-
- //设定对比度和亮度的初值(每次开始显示跟踪条的初始值)
- contrast_rat=100;
- bright_val=10;
-
- //创建一个窗口(因为创建跟踪条要用到)
- namedWindow("【效果图】加跟踪条",1);
-
- //创建跟踪条
- createTrackbar("对比度 " , "【效果图】加跟踪条" , &contrast_rat,200,callback_tracker);
- createTrackbar("亮度", "【效果图】加跟踪条" , &bright_val,200,callback_tracker);
-
- //调用回调函数
- callback_tracker(contrast_rat,0);
- callback_tracker(bright_val,0);
-
- //等待结束(必须写,否则不能正常显示)
- waitKey(0);
- return 0;
- }
-
- //回调函数
- void callback_tracker(int,void*)
- {
- //调节亮度和对比度(依次扫描每个像素)
- for(int i=0;i< lenna_2.rows; i++)
- {
- for(int j=0;j<lenna_2.cols;j++)
- {
- for(int k=0;k<3;k++)
- {
- lenna_2.at<Vec3b>(i,j)[k]=saturate_cast<uchar>((0.01*contrast_rat*(lenna_1.at<Vec3b>(i,j)[k]))+bright_val);
- }
- }
- }
-
- //显示图像
- imshow("【原图】加跟踪条",lenna_1);
- imshow("【效果图】加跟踪条",lenna_2);
- }
几点小结:
1、Mat是一个类,该类下有很多功能函数,诸如:clone, copyTo, zeros(),.....
该类的官网详细资料:https://docs.opencv.org/2.4/modules/core/doc/basic_structures.html?highlight=mat#mat
中文博客详解:https://blog.csdn.net/guyuealian/article/details/70159660
2、Vec3b 表示 8U 类型的 RGB 彩色图像,是一种类型,如同int表示整型一样。
对于灰度图(单通道),给像素赋值可用:
srcImage.at<uchar>(14,25) = 25;
对于B-G-R图(3通道),Opencv中图像三原色在内存中的排列顺序为B-G-R,给像素赋值可用(如本文):
- img.at<Vec3b>(14,25) [0]= 25;//B
- img.at< Vec3b >(14,25) [1]= 25;//G
- img.at< Vec3b >(14,25 [2]= 25;//R
3、saturate_cast为溢出保护,原理如下:
- if(data<0)
- data=0;
- else if(data>255)
- data=255;
可看原文:https://blog.csdn.net/mjlsuccess/article/details/12401839
效果:
版权声明:本博文原创,转载请注明出处。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。