生活随笔
收集整理的這篇文章主要介紹了
在OpenCV环境下对图像做Gamma校正
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
什么是Gamma校正?
Gamma校正是對輸入圖像灰度值進行的非線性操作,使輸出圖像灰度值與輸入圖像灰度值呈指數(shù)關(guān)系。
上面中的指數(shù)γ即為Gamma.
經(jīng)過Gamma校正后的輸入和輸出圖像灰度值關(guān)系如下圖所示:橫坐標是輸入灰度值,縱坐標是輸出灰度值,藍色曲線是gamma值小于1時的輸入輸出關(guān)系,紅色曲線是gamma值大于1時的輸入輸出關(guān)系。可以觀察到,當gamma值小于1時(藍色曲線),圖像的整體亮度值得到提升,同時低灰度處的對比度增加,高灰度處的對比度降低,更利于分辯低灰度值時的圖像細節(jié);當gamma值大于1時(紅色曲線),圖像的整體亮度值得到減小,同時低灰度處的對比度降低,高灰度處的對比度增加,更利于分辯高灰度值時的圖像細節(jié)。
??
為什么要進行Gamma校正?
人眼對外界光源的感光值與輸入光強不是呈線性關(guān)系的,而是呈指數(shù)型關(guān)系的。在低照度下,人眼更容易分辨出亮度的變化,隨著照度的增加,人眼不易分辨出亮度的變化。而攝像機感光與輸入光強呈線性關(guān)系。OpenCV環(huán)境下對圖像進行Gamma校正的源代碼如下:
圖像處理開發(fā)資料、圖像處理開發(fā)需求、圖像處理接私活掙零花錢,可以搜索公眾號"qxsf321",并關(guān)注!
源碼中用到的圖像下載鏈接:http://pan.baidu.com/s/1miIGyqW 密碼:bz9r
//opencv版本:OpenCV3.0
//VS版本:VS2013
//Author:qxsf321.net#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp> ? ?
#include <opencv2/imgproc/types_c.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>#include <iostream>using namespace cv;
using namespace std;void MyGammaCorrection(Mat& src, Mat& dst, float fGamma) ?
{ ?// build look up table ?unsigned char lut[256]; ?for( int i = 0; i < 256; i++ ) ?{ ?lut[i] = saturate_cast<uchar>(pow((float)(i/255.0), fGamma) * 255.0f); ?} ?dst = src.clone(); ?const int channels = dst.channels(); ?switch(channels) ?{ ?case 1: ? //灰度圖的情況{ ?MatIterator_<uchar> it, end; ?for( it = dst.begin<uchar>(), end = dst.end<uchar>(); it != end; it++ ) ?//*it = pow((float)(((*it))/255.0), fGamma) * 255.0; ?*it = lut[(*it)]; ?break; ?} ?case 3: ?//彩色圖的情況{ ?MatIterator_<Vec3b> it, end; ?for( it = dst.begin<Vec3b>(), end = dst.end<Vec3b>(); it != end; it++ ) ?{ ?//(*it)[0] = pow((float)(((*it)[0])/255.0), fGamma) * 255.0; ?//(*it)[1] = pow((float)(((*it)[1])/255.0), fGamma) * 255.0; ?//(*it)[2] = pow((float)(((*it)[2])/255.0), fGamma) * 255.0; ?(*it)[0] = lut[((*it)[0])]; ?(*it)[1] = lut[((*it)[1])]; ?(*it)[2] = lut[((*it)[2])]; ?} ?break; ?} ?} ?
} ?int main()
{Mat image = imread("gamma_pending.jpg");if (image.empty()){cout << "Error: Could not load image" << endl;return 0;}Mat dst;float fGamma=1/2.2;MyGammaCorrection(image, dst, fGamma);imshow("Source Image", image);imshow("Dst", dst);waitKey();return 0;
}
---------------------
作者:清溪算法
來源:CSDN
原文:https://blog.csdn.net/lehuoziyuan/article/details/84067207
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!
運行結(jié)果截圖如下:
從運行結(jié)果中我們可以看出:
最左邊的圖為原圖,中圖為gamma = 1/2.2時的校正結(jié)果,原圖中左半側(cè)的灰度值較高,右半側(cè)的灰度值較低,經(jīng)過gamma=1/2.2校正后(中圖),左側(cè)的對比度降低(見胡須),右側(cè)在對比度提高(明顯可以看清面容),同時圖像在的整體灰度值提高。
最右邊的圖為gamma = 2.2在校正結(jié)果,校正后,左側(cè)的對比度提高(見胡須),右側(cè)在對比度降低(面容更不清楚了),同時圖像在的整體灰度值降低。
值得一提的是:人眼是按照gamma<1的曲線對自己看到的圖像進行校正的。
---------------------?
作者:清溪算法?
來源:CSDN?
原文:https://blog.csdn.net/lehuoziyuan/article/details/84067207?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的在OpenCV环境下对图像做Gamma校正的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。