欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

直方圖均衡化介紹

圖像的直方圖是什么?

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

簡(jiǎn)單來(lái)說(shuō):直方圖是圖像中像素強(qiáng)度分布的圖形表達(dá)方式,它統(tǒng)計(jì)了每一個(gè)強(qiáng)度值所具有的像素個(gè)數(shù)。

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

在這里插入圖片描述

更形象解釋

更形象的來(lái)說(shuō),將下面像素格子對(duì)等為如上圖的圖像

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

在這里插入圖片描述

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

在這里插入圖片描述

什么是直方圖均衡化?

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

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

映射關(guān)系如下:

在這里插入圖片描述

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

直方圖均衡化的作用

因?yàn)橹狈綀D均衡化處理之后,原來(lái)比較少像素的灰度會(huì)被分配到別的灰度去,像素相對(duì)集中, 處理后灰度范圍變大,對(duì)比度變大,清晰度變大,所以能有效增強(qiáng)圖像。

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

總的來(lái)說(shuō),直方圖均衡化是用來(lái)增強(qiáng)對(duì)比度的

直方圖均衡化步驟

  1. 加載源圖像
  2. 轉(zhuǎn)為灰度圖
  3. EqualizeHist 對(duì)直方圖均衡化
  4. 顯示均衡化后圖像.

相關(guān)API

equalizeHist

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

代碼示例

灰度圖均值化

在這里插入圖片描述

#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);
	// 分別對(duì)BGR通道做直方圖均衡化
	equalizeHist(blue, blue);
	equalizeHist(green, green);
	equalizeHist(red, red);
	// 合并通道
	merge(channels, dst);
	imshow(output, dst);
	waitKey(0);
	return 0;
}

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

相關(guān)文章

  • C++ namespace相關(guān)語(yǔ)法實(shí)例分析

    C++ namespace相關(guān)語(yǔ)法實(shí)例分析

    這篇文章主要介紹了C++ namespace相關(guān)語(yǔ)法實(shí)例分析,對(duì)C++初學(xué)者有很好的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • C++常用字符串分割方法實(shí)例匯總

    C++常用字符串分割方法實(shí)例匯總

    這篇文章主要介紹了C++常用字符串分割方法實(shí)例匯總,包括了strtok函數(shù)、STL、Boost等常用的各類字符串分割方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • 通過(guò)C++程序示例理解設(shè)計(jì)模式中的外觀模式

    通過(guò)C++程序示例理解設(shè)計(jì)模式中的外觀模式

    這篇文章主要介紹了通過(guò)設(shè)計(jì)模式中的外觀模式及相關(guān)的C++程序示例,外觀模式在高層提供了一個(gè)統(tǒng)一的接口實(shí)現(xiàn)一定程度上的解耦,需要的朋友可以參考下
    2016-03-03
  • C語(yǔ)言編程中統(tǒng)計(jì)輸入的行數(shù)以及單詞個(gè)數(shù)的方法

    C語(yǔ)言編程中統(tǒng)計(jì)輸入的行數(shù)以及單詞個(gè)數(shù)的方法

    這篇文章主要介紹了C語(yǔ)言編程中統(tǒng)計(jì)輸入的行數(shù)以及單詞個(gè)數(shù)的方法,利用最基礎(chǔ)的循環(huán)和判斷語(yǔ)句寫成,需要的朋友可以參考下
    2015-11-11
  • C語(yǔ)言中棧的結(jié)構(gòu)和函數(shù)接口的使用示例

    C語(yǔ)言中棧的結(jié)構(gòu)和函數(shù)接口的使用示例

    這篇文章主要介紹了C語(yǔ)言中棧的結(jié)構(gòu)和函數(shù)接口的使用,類似很多軟件都有撤銷的操作,這其實(shí)就是用棧這種方法來(lái)實(shí)現(xiàn)的,當(dāng)然不同的軟件具體實(shí)現(xiàn)代碼會(huì)有差異,不過(guò)原理大多都是一樣的
    2023-02-02
  • C++從一個(gè)文件夾中讀出所有txt文件的方法示例

    C++從一個(gè)文件夾中讀出所有txt文件的方法示例

    這篇文章主要給大家介紹了關(guān)于C++從一個(gè)文件夾中讀出所有txt文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • 使用C語(yǔ)言中的time函數(shù)獲取系統(tǒng)時(shí)間

    使用C語(yǔ)言中的time函數(shù)獲取系統(tǒng)時(shí)間

    在C語(yǔ)言中可以使用time函數(shù)來(lái)獲取系統(tǒng)時(shí)間,以下對(duì)time函數(shù)進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-07-07
  • C++中unique函數(shù)的用法示例

    C++中unique函數(shù)的用法示例

    nique()是C++標(biāo)準(zhǔn)庫(kù)函數(shù)里面的函數(shù),下面這篇文章主要給大家介紹了關(guān)于C++中unique函數(shù)用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧
    2019-02-02
  • C語(yǔ)言實(shí)現(xiàn)數(shù)學(xué)表達(dá)式運(yùn)算

    C語(yǔ)言實(shí)現(xiàn)數(shù)學(xué)表達(dá)式運(yùn)算

    這篇文章主要為大家詳細(xì)介紹了c語(yǔ)言實(shí)現(xiàn)數(shù)學(xué)表達(dá)式運(yùn)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • VC++中內(nèi)存對(duì)齊實(shí)例教程

    VC++中內(nèi)存對(duì)齊實(shí)例教程

    這篇文章主要介紹了VC++中內(nèi)存對(duì)齊的實(shí)現(xiàn)方法,具有很高的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-08-08

最新評(píng)論