日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在OpenCV环境下对图像做Gamma校正

發(fā)布時間:2024/9/21 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在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)容還不錯,歡迎將生活随笔推薦給好友。