最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ OpenCV實(shí)現(xiàn)白平衡之灰度世界算法

 更新時(shí)間:2022年05月30日 09:56:37   作者:翟天保Steven  
灰度世界算法是白平衡各種算法中最基本的一種。本文將利用C++和OpenCV實(shí)現(xiàn)白平衡中的灰度世界算法,文中示例代碼講解詳細(xì),感興趣的可以了解一下

實(shí)現(xiàn)原理

白平衡的意義在于,對(duì)在特定光源下拍攝時(shí)出現(xiàn)的偏色現(xiàn)象,通過加強(qiáng)對(duì)應(yīng)的補(bǔ)色來進(jìn)行補(bǔ)償,使白色物體能還原為白色。

灰度世界算法是白平衡各種算法中最基本的一種。它假設(shè)圖像世界具備豐富色彩,紅藍(lán)綠三通道的灰度值在平均后趨近一致,該值作為“灰色”;若各通道均值偏離“灰色”,則將其進(jìn)行補(bǔ)償,使其回歸“灰色”,進(jìn)而實(shí)現(xiàn)白平衡的效果。

 通俗的講,若圖像中綠色較強(qiáng),藍(lán)色和紅色較弱,則用了灰度世界算法后,綠色會(huì)適當(dāng)減弱,藍(lán)色和紅色會(huì)適當(dāng)加強(qiáng),這樣就使原本偏色嚴(yán)重的情況得到了緩解。

灰度世界算法的實(shí)現(xiàn)流程如下:   

1.計(jì)算圖像RGB三通道各自的灰度平均值Raver、Gaver、Baver。

2.計(jì)算“灰色”:Gray=(Raver+Gaver+Baver)/3。

3.計(jì)算三通道的補(bǔ)償系數(shù),即灰色值除以單通道平均值。

功能函數(shù)代碼

// 白平衡-灰度世界
cv::Mat WhiteBalcane_Gray(cv::Mat src)
{
	cv::Mat result = src.clone();
	if (src.channels() != 3)
	{
		cout << "The number of image channels is not 3." << endl;
		return result;
	}
 
	// 通道分離
	vector<cv::Mat> Channel;
	cv::split(src, Channel);
 
	// 計(jì)算通道灰度值均值
	double Bm = cv::mean(Channel[0])[0];
	double Gm = cv::mean(Channel[1])[0];
	double Rm = cv::mean(Channel[2])[0];
	double Km = (Bm + Gm + Rm) / 3;
 
	// 通道灰度值調(diào)整
	Channel[0] *= Km / Bm;
	Channel[1] *= Km / Gm;
	Channel[2] *= Km / Rm;
 
	// 合并通道
	cv::merge(Channel, result);
 
	return result;
}

C++測(cè)試代碼

#include <iostream>
#include <opencv.hpp>
 
using namespace std;
 
// 白平衡-灰度世界
cv::Mat WhiteBalcane_Gray(cv::Mat src)
{
	cv::Mat result = src.clone();
	if (src.channels() != 3)
	{
		cout << "The number of image channels is not 3." << endl;
		return result;
	}
 
	// 通道分離
	vector<cv::Mat> Channel;
	cv::split(src, Channel);
 
	// 計(jì)算通道灰度值均值
	double Bm = cv::mean(Channel[0])[0];
	double Gm = cv::mean(Channel[1])[0];
	double Rm = cv::mean(Channel[2])[0];
	double Km = (Bm + Gm + Rm) / 3;
 
	// 通道灰度值調(diào)整
	Channel[0] *= Km / Bm;
	Channel[1] *= Km / Gm;
	Channel[2] *= Km / Rm;
 
	// 合并通道
	cv::merge(Channel, result);
 
	return result;
}
 
int main()
{
	// 載入原圖
	cv::Mat src = cv::imread("test.jpg");
 
	// 白平衡-灰度世界
	cv::Mat result = WhiteBalcane_Gray(src);
 
	// 顯示
	cv::imshow("src", src);
	cv::imshow("result", result);
	cv::waitKey(0);
 
	return 0;
}

測(cè)試效果

圖1 原圖

圖2 白平衡后圖像

如圖1所示,是傍晚的一張圖像,眾所周知,傍晚的色溫是較低的,此時(shí)采用高于傍晚色溫的色溫值拍照,就會(huì)得到一張暖色系的圖片,偏黃;對(duì)其進(jìn)行白平衡,使圖片顏色回歸真實(shí)的環(huán)境色溫,就得到如圖2的效果。

圖3 單色原圖

圖4 白平衡后圖像

如圖3所示,是一張色彩相對(duì)一致的圖像,整體呈粉色系,此時(shí)應(yīng)用灰度世界算法,圖像會(huì)整體調(diào)整,使得顏色趨近于灰色;感興趣的可以去看看該顏色的色條,三通道的數(shù)值在180-220左右,沒有過大的差異,平衡后三數(shù)值接近于190,因而呈灰色。

接下來做個(gè)有趣的測(cè)試,將原本粉色的墻紙?jiān)O(shè)為較純的綠色。

圖5 調(diào)色后的圖像

圖6 白平衡后效果

如圖5所示,因?yàn)閳D像中存在色調(diào)相沖的兩個(gè)部分,在白平衡后,原本的綠色會(huì)調(diào)整為深綠色,圖像綠色分量降低,其他分量升高,這就導(dǎo)致原本偏粉色的人像區(qū)更粉了,這也是該算法的弊端。做該測(cè)試也是為了幫助大家更全面深層地理解算法應(yīng)用場景。

以上就是C++ OpenCV實(shí)現(xiàn)白平衡之灰度世界算法的詳細(xì)內(nèi)容,更多關(guān)于C++ OpenCV灰度世界算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解析c語言中"函數(shù)調(diào)用中缺少哨兵"的情況分析

    解析c語言中"函數(shù)調(diào)用中缺少哨兵"的情況分析

    本篇文章是對(duì)c語言中"函數(shù)調(diào)用中缺少哨兵"的情況進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++?OpenGL實(shí)現(xiàn)球形的繪制

    C++?OpenGL實(shí)現(xiàn)球形的繪制

    這篇文章主要主要為大家詳細(xì)介紹了如何利用C++和OpenGL實(shí)現(xiàn)球形的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手嘗試一下
    2022-07-07
  • C++ 中使用不同平臺(tái)的時(shí)間函數(shù)及對(duì)比分析

    C++ 中使用不同平臺(tái)的時(shí)間函數(shù)及對(duì)比分析

    在C++ 編程中,時(shí)間函數(shù)的選擇對(duì)于性能測(cè)量、任務(wù)調(diào)度和時(shí)間戳記錄至關(guān)重要,本文將介紹在 C++ 中常用的時(shí)間函數(shù),并比較它們?cè)诓煌脚_(tái)上的應(yīng)用和效果,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • C++ 將數(shù)據(jù)轉(zhuǎn)為字符串的幾種方法

    C++ 將數(shù)據(jù)轉(zhuǎn)為字符串的幾種方法

    這篇文章主要介紹了C++ 將數(shù)據(jù)轉(zhuǎn)為字符串的幾種方法,十分的實(shí)用,有需要的小伙伴可以參考下。
    2015-06-06
  • C++引用的詳細(xì)解釋

    C++引用的詳細(xì)解釋

    以下是對(duì)C++中引用的使用進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助,希望能夠給你帶來幫助
    2021-11-11
  • string中c_str(),data(),copy(p,n)函數(shù)的用法總結(jié)

    string中c_str(),data(),copy(p,n)函數(shù)的用法總結(jié)

    以下是對(duì)string中c_str(),data(),copy(p,n)函數(shù)的用法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-09-09
  • C語言實(shí)現(xiàn)簡單三子棋小游戲

    C語言實(shí)現(xiàn)簡單三子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單三子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 詳解C++中變量的初始化規(guī)則

    詳解C++中變量的初始化規(guī)則

    這篇文章詳細(xì)介紹了關(guān)于C++中變量的初始化規(guī)則,C++如果不對(duì)變量初始化,可能會(huì)導(dǎo)致很多后果,所以學(xué)習(xí)C++變量初始化規(guī)則就很重要了,下面一起來看看
    2016-08-08
  • C++中函數(shù)模板與類模板的簡單使用及區(qū)別介紹

    C++中函數(shù)模板與類模板的簡單使用及區(qū)別介紹

    這篇文章介紹了C++中的模板機(jī)制,包括函數(shù)模板和類模板的概念、語法和實(shí)際應(yīng)用,函數(shù)模板通過類型參數(shù)實(shí)現(xiàn)泛型操作,而類模板允許創(chuàng)建可處理多種數(shù)據(jù)類型的類,文章還討論了模板的關(guān)鍵區(qū)別、注意事項(xiàng)以及它們?cè)趯?shí)際編程中的應(yīng)用,感興趣的朋友一起看看吧
    2025-03-03
  • C語言算法積累分離數(shù)位示例

    C語言算法積累分離數(shù)位示例

    這篇文章主要為大家介紹了C語言算法積累分離數(shù)位的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論

茶陵县| 阿勒泰市| 定安县| 社旗县| 石楼县| 双辽市| 全州县| 林周县| 丽水市| 尚志市| 威海市| 驻马店市| 丰台区| 通江县| 都昌县| 陇川县| 五大连池市| 福鼎市| 股票| 上栗县| 萍乡市| 琼结县| 苍溪县| 策勒县| 韶关市| 景东| 射洪县| 湘乡市| 罗平县| 天柱县| 大关县| 高淳县| 长乐市| 仙游县| 娱乐| 香港 | 山西省| 八宿县| 周口市| 峨眉山市| 嘉禾县|