opencv 手动调整照片颜色小工具 对比度 亮度 BGR 各通道

一、运行界面

opencv 手动调整照片颜色小工具 对比度 亮度 BGR 各通道_第1张图片



#include   
#include   
#include "opencv2/imgproc/imgproc.hpp"  
#include   
#include 
#define INITBGR 30
   
//-----------------------------------【命名空间声明部分】---------------------------------------  
//     描述:包含程序所使用的命名空间  
//-----------------------------------------------------------------------------------------------    
using namespace std;  
using namespace cv;  
   
   
//-----------------------------------【全局函数声明部分】--------------------------------------  
//     描述:全局函数声明  
//-----------------------------------------------------------------------------------------------  
static void ContrastAndBright(int, void *);  
static void ContrastAndBrightb(int, void *);  
static void ContrastAndBrightg(int, void *);  
static void ContrastAndBrightr(int, void *);  
   
//-----------------------------------【全局变量声明部分】--------------------------------------  
//     描述:全局变量声明  
//-----------------------------------------------------------------------------------------------  
int g_nContrastValue; //对比度值  
int g_nBrightValue;  //亮度值  
int g_b;
int g_g;
int g_r;
Mat g_srcImage,g_dstImage;  
//-----------------------------------【main( )函数】--------------------------------------------  
//     描述:控制台应用程序的入口函数,我们的程序从这里开始  
//-----------------------------------------------------------------------------------------------  
int main(int argc, char *argv[])  
{  


       if (2 != argc) 
       {
              cout << "Please enter the image list!" <  file_names;
       FILE *file_list =  fopen(argv[1],"r");
       char buf[255];
       memset(&buf,0,sizeof(buf));

       while(fgets(buf,255,file_list))
       {
              if(buf[strlen(buf)-1] == '\n') 
                     buf[strlen(buf)-1] = '\0';
              file_names.push_back(string(buf));

       }
       
       fclose(file_list);
       int count = file_names.size();
       for(int  i=0; i(y,x)[0]= saturate_cast( (g_nContrastValue*0.01)*(g_srcImage.at(y,x)[0] ) + g_nBrightValue+g_b);  
                     g_dstImage.at(y,x)[1]= saturate_cast( (g_nContrastValue*0.01)*(g_srcImage.at(y,x)[1] ) + g_nBrightValue+g_g);  
                     g_dstImage.at(y,x)[2]= saturate_cast( (g_nContrastValue*0.01)*(g_srcImage.at(y,x)[2] ) + g_nBrightValue+g_r);  
              
              }  
       }  
   
       //显示图像  
       imshow("【原始图窗口】", g_srcImage);  
       imshow("【效果图窗口】", g_dstImage);  
} 

static void ContrastAndBrightb(int, void *)  
{  
   
       //创建窗口  
       namedWindow("【原始图窗口】", 0);  
       g_b=g_b-INITBGR;
       //三个for循环,执行运算 g_dstImage(i,j) =a*g_srcImage(i,j) + b  
       for(int y = 0; y < g_srcImage.rows; y++ )  
       {  
              for(int x = 0; x < g_srcImage.cols; x++ )  
              {  
                   
                     g_dstImage.at(y,x)[0]= saturate_cast( (g_nContrastValue*0.01)*g_srcImage.at(y,x)[0]  + g_nBrightValue + g_b);  
                     
              }  
       }  
   
       //显示图像  
       imshow("【原始图窗口】", g_srcImage);  
       imshow("【效果图窗口】", g_dstImage);  
} 

static void ContrastAndBrightg(int, void *)  
{  
   
       //创建窗口  
       namedWindow("【原始图窗口】", 0);  
       g_g=g_g-INITBGR;
       //三个for循环,执行运算 g_dstImage(i,j) =a*g_srcImage(i,j) + b  
       for(int y = 0; y < g_srcImage.rows; y++ )  
       {  
              for(int x = 0; x < g_srcImage.cols; x++ )  
              {  
                   
                     g_dstImage.at(y,x)[1]= saturate_cast( (g_nContrastValue*0.01)*g_srcImage.at(y,x)[1]  + g_nBrightValue + g_g);  
                     
              }  
       }  
   
       //显示图像  
       imshow("【原始图窗口】", g_srcImage);  
       imshow("【效果图窗口】", g_dstImage);  
} 

static void ContrastAndBrightr(int, void *)  
{  
   
       //创建窗口  
       namedWindow("【原始图窗口】", 0);  
       g_r=g_r-INITBGR;
       //三个for循环,执行运算 g_dstImage(i,j) =a*g_srcImage(i,j) + b  
       for(int y = 0; y < g_srcImage.rows; y++ )  
       {  
              for(int x = 0; x < g_srcImage.cols; x++ )  
              {  
                   
                     g_dstImage.at(y,x)[2]= saturate_cast( (g_nContrastValue*0.01)*g_srcImage.at(y,x)[2]  + g_nBrightValue + g_r);  
                     
              }  
       }  
   
       //显示图像  
       imshow("【原始图窗口】", g_srcImage);  
       imshow("【效果图窗口】", g_dstImage);  
} 

说明:

输入是一个包含照片名字的文本文档,调整完后按q自动加载另一张照片以及保存打开的照片

程序运行速度比较慢,有待提高。




你可能感兴趣的:(opencv,滚动条,手动校色)