Opencv中用进度条调节亮度、对比度

#include  "highgui.h"
#include  "iostream"
#include  "vector"

using namespace std;
using namespace cv;

static void callbackSlide(int ,void*);      

Mat img,src;                        //步骤1,定义后面用到的变量,要想让main函数和其他函数都能使用,必须定义全局变量;
int contrastValue=80; 
int lightValue=80;

int main ()
{  
img=imread("cui.jpg");//步骤二,打开一张待处理图片 
if(img.empty())          
cout<<"wrong"<<endl;

src=Mat::zeros(img.rows,img.cols,img.type());   //避免改变原图片,用一张新的去处理  rows是行,cols是列,type是类型  


   namedWindow("效果图");
        createTrackbar("对比度","效果图",&contrastValue,300,callbackSlide);    //z最大值必须是整数,如果是小数的话,要通过比例缩放来改变,比如想让对比度最大为3.0,最大值设为300,在后面处理时乘以0.01
 createTrackbar("亮度","效果图",&lightValue,200,callbackSlide); 

waitKey(0);   //同时显示原图和效果图的情况下如果waitKey放到每个imshow后面会乱

}
static void callbackSlide(int,void*)   //回调函数就是一种进度条当前值与实际变化效果的对应关系,输入对比度(亮度)当前值的数字,通过程序得到对比度和亮度的改变。这也是理解回调函数的核心,在上一个例子中,回调函数通过:输入视频帧数的当前值,得到的是改变后的帧的位置。


{
namedWindow("原图");
for(int i=0;i<img.rows;i++)
{
for(int j=0;j<img.cols;j++)
{
for(int x=0;x<3;x++)
{
(src.at<Vec3b>(i,j)[x])=saturate_cast<uchar>((img.at<Vec3b>(i,j)[x]*contrastValue*0.01)+lightValue);  //Vec3b要包含头文件vector
}
}
}

imshow("原图",img); 
imshow("效果图",src);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值