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

OpenCV?直方圖均衡化的實現(xiàn)原理解析

 更新時間:2022年01月25日 09:27:57   作者:流楚丶格念  
直方圖均衡化是通過拉伸像素強度分布范圍來增強圖像對比度的一種方法,今天通過本文給大家介紹OpenCV?直方圖均衡化的實現(xiàn)原理解析,感興趣的朋友跟隨小編一起看看吧

直方圖均衡化介紹

圖像的直方圖是什么?

圖像直方圖,是指對整個圖像像在灰度范圍內的像素值(0~255)統(tǒng)計出現(xiàn)頻率次數(shù),據(jù)此生成的直方圖,稱為圖像直方圖-直方圖。直方圖反映了圖像灰度的分布情況。是圖像的統(tǒng)計學特征。

簡單來說:直方圖是圖像中像素強度分布的圖形表達方式,它統(tǒng)計了每一個強度值所具有的像素個數(shù)。

例如下面這張圖片,左圖為灰度圖,右圖統(tǒng)計了這張圖的所有像素值(0~255)對應的像素個數(shù)

在這里插入圖片描述

更形象解釋

更形象的來說,將下面像素格子對等為如上圖的圖像

假設有該圖像數(shù)據(jù)8x8,像素值范圍0~14共15個灰度等級,統(tǒng)計得到各個等級出現(xiàn)次數(shù)及直方圖如下圖所示:

在這里插入圖片描述

則對上面抽象出來的圖像(像素格子)進行像素與出現(xiàn)次數(shù)的統(tǒng)計得到下圖左側的表格,做出頻率圖如右圖所示:

在這里插入圖片描述

什么是直方圖均衡化?

是一種提高圖像對比度的方法,拉伸圖像灰度值范圍。

簡單來說, 以上面狗狗的的直方圖為例, 你可以看到像素主要集中在中間的一些強度值上。直方圖均衡化要做的就是 拉伸 這個范圍。就是下面藍框框出來的范圍就是像素主要幾種區(qū)間。

在這里插入圖片描述

見下圖:綠圈 圈出了 像素分布率較低像素值,對其應用均衡化后(將中間藍框像素分布較高的區(qū)間拉伸), 得到了中間圖所示的直方圖。均衡化的圖像見下面右圖.

在這里插入圖片描述

直方圖均衡化是如何實現(xiàn)的?

通過remap我們知道可以將圖像灰度分布從一個分布映射到另外一個分布,然后在得到映射后的像素值即可。

映射關系如下:

在這里插入圖片描述

其中源直方圖 H(i), 累積分布 H’(i)函數(shù),equalized()為重映射后的圖像

直方圖均衡化的作用

因為直方圖均衡化處理之后,原來比較少像素的灰度會被分配到別的灰度去,像素相對集中, 處理后灰度范圍變大,對比度變大,清晰度變大,所以能有效增強圖像。

直方圖均衡化是圖像處理領域中利用圖像直方圖對對比度進行調整的方法。這種方法通常用來增加許多圖像的局部對比度,尤其是當圖像的有用數(shù)據(jù)的對比度相當接近的時候。通過這種方法,亮度可以更好地在直方圖上分布。這樣就可以用于增強局部的對比度而不影響整體的對比度,直方圖均衡化通過有效地擴展常用的亮度來實現(xiàn)這種功能。

總的來說,直方圖均衡化是用來增強對比度的

直方圖均衡化步驟

  1. 加載源圖像
  2. 轉為灰度圖
  3. EqualizeHist 對直方圖均衡化
  4. 顯示均衡化后圖像.

相關API

equalizeHist

cv::equalizeHist(
	InputArray src,	// 輸入圖像,必須是8-bit的單通道圖像
	OutputArray dst	// 輸出結果
)

代碼示例

灰度圖均值化

在這里插入圖片描述

#include <iostream>
#include <math.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/highgui/highgui_c.h> 

using namespace cv;
int main(int argc, char** argv) 
{
	Mat src, dst;
	src = imread("./test2.jpg");
	if (!src.data) {
		printf("could not load image...\n");
		return -1;
	}
	cvtColor(src, src, CV_BGR2GRAY);
	equalizeHist(src, dst);
	char INPUT_T[] = "input image";
	char OUTPUT_T[] = "result image";
	namedWindow(INPUT_T, CV_WINDOW_AUTOSIZE);
	namedWindow(OUTPUT_T, CV_WINDOW_AUTOSIZE);
	imshow(INPUT_T, src);
	imshow(OUTPUT_T, dst);
	waitKey(0);
	return 0;
}

彩色圖均值化

在這里插入圖片描述

#include <iostream>
#include <math.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/highgui/highgui_c.h> 

using namespace cv;
using namespace std;
int main(int argc, char*argv)
{
	Mat src, dst, dst1;
	src = imread("./test2.jpg");
	if (!src.data)
	{
		printf("could not load image...\n");
		return -1;
	}
	char input[] = "input image";
	char output[] = "histogram iamge";
	namedWindow(input, CV_WINDOW_AUTOSIZE);
	namedWindow(output, CV_WINDOW_AUTOSIZE);
	imshow(input, src);
	// 分割通道
	vector<Mat>channels;
	split(src, channels);
	Mat blue, green, red;
	blue = channels.at(0);
	green = channels.at(1);
	red = channels.at(2);
	// 分別對BGR通道做直方圖均衡化
	equalizeHist(blue, blue);
	equalizeHist(green, green);
	equalizeHist(red, red);
	// 合并通道
	merge(channels, dst);
	imshow(output, dst);
	waitKey(0);
	return 0;
}

到此這篇關于OpenCV 直方圖均衡化的文章就介紹到這了,更多相關OpenCV 直方圖均衡化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • c語言實現(xiàn)兩個值互相交換的函數(shù)

    c語言實現(xiàn)兩個值互相交換的函數(shù)

    本文通過代碼給大家介紹c語言實現(xiàn)兩個值互相交換的函數(shù),通過實例代碼給大家講解的很詳細,具有一定的參考借鑒價值,對c語言兩個值互換函數(shù)相關知識感興趣的朋友一起看看吧
    2021-05-05
  • C++面試八股文之STL標準模板庫使用詳解

    C++面試八股文之STL標準模板庫使用詳解

    這篇文章主要為大家介紹了C++面試八股文之STL標準模板庫使用詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • C語言?智能指針?shared_ptr?和?weak_ptr

    C語言?智能指針?shared_ptr?和?weak_ptr

    這篇文章主要介紹了C語言?智能指針?shared_ptr?和?weak_ptr,weak_ptr引入可以解決shared_ptr交叉引用時無法釋放資源的問題,下面來學習具體相關內容吧,需要的朋友可以參考一下
    2022-04-04
  • c語言5個常用的排序算法實例代碼

    c語言5個常用的排序算法實例代碼

    這篇文章主要介紹了c語言5個常用的排序算法實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 超詳細講解C++的三種函數(shù)傳遞方式

    超詳細講解C++的三種函數(shù)傳遞方式

    這個文章我將把我學習的有關函數(shù)傳遞形式的知識做個總結,相信很多剛入門的同學看到許多文章五花八門的形參會感到頭疼,但本質上無非就是我要說的三種傳遞形式,快來跟我一起學習吧
    2022-05-05
  • C++實現(xiàn)詞法分析器

    C++實現(xiàn)詞法分析器

    這篇文章主要為大家詳細介紹了C++實現(xiàn)詞法分析器的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語言之浮點數(shù)的表示與儲存方式

    C語言之浮點數(shù)的表示與儲存方式

    這篇文章主要介紹了C語言之浮點數(shù)的表示與儲存方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • C++?容器?Vector?的使用方法

    C++?容器?Vector?的使用方法

    這篇文章主要介紹了C++?容器?Vector?的使用方法,Vector?是一個能夠存放任意類型的動態(tài)數(shù)組,有點類似數(shù)組,是一個連續(xù)地址空間,下文更多詳細內容的介紹,需要的小伙伴可以參考一下
    2022-06-06
  • Linux管道揭秘之匿名管道連接進程世界的方法

    Linux管道揭秘之匿名管道連接進程世界的方法

    文章介紹了Linux中的管道(Pipe)概念,包括其定義、作用、類型、工作原理以及如何在父子進程間使用,匿名管道是進程間通信的一種機制,通過pipe()系統(tǒng)調用創(chuàng)建,具有讀端和寫端文件描述符,文章詳細解釋了匿名管道的創(chuàng)建、使用流程、4種情況和5種特性
    2024-11-11
  • GCC編譯過程(預處理,編譯,匯編,鏈接)及GCC命令詳解

    GCC編譯過程(預處理,編譯,匯編,鏈接)及GCC命令詳解

    文章詳細介紹了GCC編譯器的工作原理,包括預處理、編譯、匯編和鏈接四個主要階段,每個階段都有其特定的任務和輸出文件,文章還解釋了如何使用GCC命令選項來查看每個階段的輸出,以及如何通過調整編譯選項來優(yōu)化程序性能或調試問題,感興趣的朋友跟隨小編一起看看吧
    2024-11-11

最新評論

敦煌市| 富平县| 涞源县| 平邑县| 噶尔县| 阿克苏市| 新乐市| 伊宁县| 通海县| 胶州市| 如皋市| 岢岚县| 灵武市| 古蔺县| 林周县| 永城市| 泽库县| 柘城县| 迁西县| 台北市| 炎陵县| 高州市| 德格县| 安庆市| 台湾省| 乌鲁木齐县| 通州市| 乌审旗| 汕头市| 开远市| 四会市| 淳安县| 和林格尔县| 鸡西市| 理塘县| 花垣县| 望都县| 北川| 吴堡县| 泰顺县| 德安县|