溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么

發(fā)布時(shí)間:2021-12-15 18:04:39 來源:億速云 閱讀:153 作者:柒染 欄目:大數(shù)據(jù)

這篇文章給大家介紹opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。


opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么 

上面這幅黑乎乎的圖就是我們今天要處理的圖片,這是書的一頁,但特別特別黑,對于這種因?yàn)殛幱岸鴮?dǎo)致的細(xì)節(jié)缺失,我們就可以嘗試對其進(jìn)行圖像增強(qiáng)了。

圖像增強(qiáng)真的有不少內(nèi)容,范圍也很廣泛,今天就只針對這個(gè)例子進(jìn)行實(shí)踐了。代碼都是成塊兒的,大家可以復(fù)制自行組合    

整體框架搭建

首先就先寫個(gè)框架啦,讀取圖片顯示圖片啥的:

#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;int main(){  Mat img_output;  Mat img_input = imread("bookpage.jpg",0);  if (img_input.empty())  {    cout << "圖片為空" << endl;  }  //在這加圖片處理的函數(shù)  imshow("輸入", img_input);  imshow("輸出", img_output);  waitKey();  return 0;}

我們以灰度圖將原書頁照片讀進(jìn)來,顯示如下:

opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么

可以看到整個(gè)以黑乎乎的,看著太難受了,不過雖然我們?nèi)搜劭粗切┳质菬o法識(shí)別的,但其實(shí)在像素層面上,字的輪廓還是依然在的,而我們要做的就是將圖片增強(qiáng)到文字可以為人眼所見的程度。

手機(jī)相機(jī)處理

在我們開始自己處理之前呢,先看下用手機(jī)相機(jī)隨便處理一下的結(jié)果:

opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么

我們自己處理,怎么也得達(dá)到這種效果吧。

直方圖均衡化

直方圖均衡化是常見的一種圖像增強(qiáng)技術(shù),直方圖均衡可以讓像素值由狹小區(qū)域擴(kuò)大到整個(gè)像素區(qū)域,如下圖,橫軸為像素灰度值,豎軸為該像素值在圖片中的比例:

opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么

左圖在直方圖均衡化之后,像素值有明顯的擴(kuò)散分布,進(jìn)而提高了圖片的對比度。

而本例中就是因?yàn)閳D像太黑,也就是像素值集中分布在黑色部分,均衡化可以提高對比度,我們可以看下均衡化的效果:

//直方圖均衡化equalizeHist(img_input, img_output);

opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么

可以看到效果并不是很好,但這還只是初步處理,也許再進(jìn)行直方圖局部均衡化就會(huì)更好一些了。

閾值化操作

我們可以知道圖片很黑是因?yàn)橛泻芏嗷叶燃?jí)很低的像素聚集,我們只要將這些像素過濾掉就可以了,過濾我們可以采用閾值化操作或者二值化操作,我們看看閾值化操作:

//閾值化操作threshold(img_input, img_output, 8, 255, THRESH_BINARY);

opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么

可以看到結(jié)果也并不十分理想。但opencv還有一個(gè)自適應(yīng)閾值函數(shù),這個(gè)函數(shù)要更為巧妙一些

  //自適應(yīng)閾值函數(shù)  adaptiveThreshold(img_input, img_output, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 7, 3);

opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么

可以看到雖然我們可以看清楚上面的字,但并不美觀,而且因?yàn)殚撝祷僮鞯脑?,書頁顏色非黑即白,非常失真?/p>

調(diào)整亮度和對比度

我們可以遍歷圖片中(i , j)處的像素,并對其進(jìn)行如下操作:

opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么

  • f(i,j)代表原圖像像素

  • g(i,j)代表處理后的圖像像素

  • a 稱為增益,用來調(diào)節(jié)圖像對比度

  • b 稱為偏置,用來調(diào)整圖像亮度

//@srcImage:輸入單通道圖像//@a:增益,調(diào)對比度//@b:偏置,調(diào)亮度Mat contrast_bright(Mat img_input,float a = 1, float b = 0){  Mat dstImage,srcImage = img_input;  srcImage.copyTo(dstImage);  int row = srcImage.rows;  int col = srcImage.cols;  // 兩個(gè)個(gè)for循環(huán),執(zhí)行運(yùn)算 dstImage(i,j) = a*srcImage(i,j) + b  for (int y = 0; y < row; y++)  {    for (int x = 0; x < col; x++)    {      dstImage.at<uchar>(y, x) = saturate_cast<uchar>(a*(img_input.at<uchar>(y, x)) + b );    }  }  return dstImage;}
  //調(diào)節(jié)亮度和對比度  img_output = contrast_bright(img_input,6,60);

opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么

可以看到,通過調(diào)節(jié)亮度和對比度的方法,已經(jīng)可以達(dá)到不錯(cuò)的效果。

對像素進(jìn)行l(wèi)og變換和伽馬變換

我們還可以嘗試對圖像進(jìn)行變換,比如log函數(shù)變換和伽馬變換。以伽馬變換為例:

先看一下伽馬變換的公式:

opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么

輸入r就是圖片某點(diǎn)像素值,輸出s為變換后的像素值。下圖為該公式c取1,γ取不同值時(shí)的函數(shù)圖形:

opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么

我們可以看到:

  • 當(dāng)γ小于1時(shí),以γ=0.10為例,該變換會(huì)將窄范圍的低級(jí)灰度轉(zhuǎn)變?yōu)榛叶燃?jí)較高的值,直觀上體現(xiàn)為圖片變亮。

  • 當(dāng)γ大于1時(shí),以γ=5.0所示,該變換會(huì)將較寬范圍的灰度轉(zhuǎn)變?yōu)榈图?jí)灰度,直觀上體現(xiàn)為變暗。

簡單代碼實(shí)現(xiàn):

//@img_input:輸入單通道圖像//@gamma:gamma次方//@n_c:乘以常數(shù)n_cMat gammaTrans(Mat& img_input, float gamma, int n_c){  Mat img_Gamma(img_input.size(), CV_8UC1);  for (int i = 0; i < img_input.rows; i++)  {    for (int j = 0; j < img_input.cols; j++)    {      img_Gamma.at<uchar>(i, j) = n_c * pow(img_input.at<uchar>(i, j), gamma);    }  }  normalize(img_Gamma, img_Gamma, 0, 255, CV_MINMAX); //將像素值映射到0-255范圍  return img_Gamma;}
  //伽馬變換  img_output = gammaTrans(img_input,0.4,3);

opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么

伽馬變換只是方式之一,可以用來像素映射的函數(shù)多種多樣,一般都視實(shí)際情況而定。

關(guān)于opencv實(shí)踐中圖像增強(qiáng)的基本操作是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI