3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
opencv_ex23-圖像放大pyrUp、彩色轉灰階cvtColor、直方圖拉伸(直方圖等化)equalizeHist GITHUB: https://github.com/jash-git/CPP_opencv249_ex     使用時機:我們可透過拉伸直方圖,使直方圖覆蓋所有強度範圍,這種方法的確能提高影像對比度,但是在多數情況,影像模糊不是因為過窄的強度範圍,而是某區間的像素強度比例過高,這時可以製作一個映射表,使得調整之後的影像,能平均使用所有的強度,進而增加影像的整體對比度。     OpenCV直方圖等化         void equalizeHist(InputArray src, OutputArray dst)         src:輸入圖,8位元單通道圖。         dst:輸出圖,和輸入圖尺寸、型態相同。         equalizeHist()函式可得到直方圖等化後的影像,以下為流程,OpenCV已將流程封裝好,使用時只要直接呼叫equalizeHist()函式即可:         計算輸入圖的直方圖。         將直方圖歸一到所有bin的總合為255。         計算直方圖累計表。         用直方圖累計表完成各強度的映射,所以假設強度30所累積的比例為20%,映射的強度即為255*0.2,由於我們直方圖歸一化到255,所以假設強度30所累積的值為20,映射的強度即為20。 #include #include #include #include #include #include #include #if defined(WIN32) #define TIMEB _timeb #define ftime _ftime typedef __int64 TIME_T; #else #define TIMEB timeb typedef long long TIME_T; #endif using namespace cv; using namespace std; Mat src;//input image void Pause() { printf("Press Enter key to continue..."); fgetc(stdin); } int main() { Mat input; input = imread("Lena_original.jpg"); if (!input.data) { printf("could not load image...\n"); } else { //放大 pyrUp(input, src, Size(input.cols*2, input.rows*2)); imshow("Lena_original", src); Mat gray_src,dst; cvtColor(src, gray_src, CV_BGR2GRAY); imshow("Lena_gray", gray_src); /* 使用時機:我們可透過拉伸直方圖,使直方圖覆蓋所有強度範圍,這種方法的確能提高影像對比度,但是在多數情況,影像模糊不是因為過窄的強度範圍,而是某區間的像素強度比例過高,這時可以製作一個映射表,使得調整之後的影像,能平均使用所有的強度,進而增加影像的整體對比度。 OpenCV直方圖等化 void equalizeHist(InputArray src, OutputArray dst) src:輸入圖,8位元單通道圖。 dst:輸出圖,和輸入圖尺寸、型態相同。 equalizeHist()函式可得到直方圖等化後的影像,以下為流程,OpenCV已將流程封裝好,使用時只要直接呼叫equalizeHist()函式即可: 計算輸入圖的直方圖。 將直方圖歸一到所有bin的總合為255。 計算直方圖累計表。 用直方圖累計表完成各強度的映射,所以假設強度30所累積的比例為20%,映射的強度即為255*0.2,由於我們直方圖歸一化到255,所以假設強度30所累積的值為20,映射的強度即為20。 */ equalizeHist(gray_src, dst); imshow("equalizeHist", dst); } waitKey(0); Pause(); return 0; }

本文由jashliaoeuwordpress提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦