zoukankan      html  css  js  c++  java
  • Changing the contrast and brightness of an image!(opencv对比度和亮度调节)

    改变图像对比度和亮度的两个函数:

    1. srcImg.cv::convertTo(dstImg,-1,alpha,beta)   // 直方图平移:f(i,j)=a*f(i,j) + b;

    2. gamaT()  // 首先构造一个查询表,i的取值0-255。每个像素取对应的r校正值LUT[i];遍历图相,将每个像素的值按照方程式变换,也就是查询像素值对应的LUT值,然后替换。

      gamaT函数如下:

    参考网址:

    https://docs.opencv.org/master/d3/dc1/tutorial_basic_linear_transform.html

    展示结果

    第一张原始图,第二张srcImg.cv::convertTo(dstImg,-1,1.1,30),第三张gama校正,r=0.8;

    源代码:GamaT.cpp

    #include <iostream>
    #include <opencv2highguihighgui.hpp>
    #include <opencv2corecore.hpp>
    #include <opencv2imgprocimgproc.hpp>
    #include <cmath>
    #include "GamaT.h"
    
    using namespace cv;
    using namespace std;
    
    Mat GamaT(Mat &srcImg, float kFactor)
    {
    	unsigned char LUT[256];
    	for (int i = 0; i < 256; i++)
    	{
    		// 构造一个查询表,i的取值0-255。每个像素取对应的r校正值。
    		float f = i / 255.0f;
    		f = (float)pow(f, kFactor);
    		LUT[i] = saturate_cast<uchar>(f*255.0f);
    	}
    	Mat rImg1;
    	Mat rImg2 = srcImg.clone();
    
    	// 方法一:直方图平移:f(i,j)=a*f(i,j) + b;
    	//srcImg.convertTo(rImg1, -1, 1.1, 30);
    	//imshow("converTo", rImg1);
    
    	// gamaT校正,调节kFactor,在调节明度和对比度的同时最大限度的保留图像细节。
    	if (srcImg.channels() == 1)
    	{
    		MatIterator_<uchar> iterator = rImg2.begin<uchar>();
    		MatIterator_<uchar> iteratorend = rImg1.end<uchar>();
    		for (; iterator != iterator; iterator++)
    		{
    			//像素范围是有限的0-255,像素个数时rows X cols.
    			*iterator = LUT[*iterator];	//当遇到每一个像素时,直接查表,速度更快。
    		}
    	}
    	else
    	{
    		MatIterator_<Vec3b> iterator = rImg2.begin<Vec3b>();
    		MatIterator_<Vec3b> iteratorend = rImg1.end<Vec3b>();
    		for (; iterator != iteratorend; iterator++)
    		{
    			(*iterator)[0] = LUT[((*iterator))[0]];	//blue
    			(*iterator)[1] = LUT[((*iterator))[1]];	//green
    			(*iterator)[2] = LUT[((*iterator))[2]];	//red
    		}
    	}
    	imshow("r", rImg2);
    	waitKey();
    	return rImg2;
    }
    

      

    最后,感谢博主 零钱币

    https://blog.csdn.net/linqianbi/article/details/78617615

  • 相关阅读:
    Python基础之:数字字符串和列表
    【Flutter 实战】自定义动画-涟漪和雷达扫描
    【Flutter 实战】动画序列、共享动画、路由动画
    kubernetes备份恢复之velero
    Go语言中使用K8s API及一些常用API整理
    Go SDK 操作Docker
    Kubernetes中各组件简介(一)
    HTTPS协议原理解析
    树莓派无屏上手指南
    如何优雅的进行版本回退
  • 原文地址:https://www.cnblogs.com/philothypeipei/p/12130946.html
Copyright © 2011-2022 走看看