詳解如何使用OpenCV和像素處理圖像灰度化
數(shù)字圖像處理
在數(shù)字圖像處理中,我們經(jīng)常需要將彩色圖像轉(zhuǎn)換為灰度圖像,以便應(yīng)用各種算法。其中,最簡單的方法是對(duì)每個(gè)像素的RGB值取平均值,稱為平均灰度化。但這種方式會(huì)丟失一些重要的圖像信息,例如亮度和對(duì)比度,所以更常見的方式是根據(jù)不同的權(quán)重將RGB值組合成一個(gè)灰度值。
讀入圖像,并觀察其通道結(jié)構(gòu)。
對(duì)每個(gè)像素進(jìn)行灰度化處理。
觀察不同灰度化算法的效果比較。
將灰度化后的圖像輸出和顯示。
通過本文的學(xué)習(xí),您將了解到如何使用OpenCV庫和基本像素處理方法來對(duì)圖像進(jìn)行處理。
圖像讀入和通道結(jié)構(gòu)
在這個(gè)例子中,我們使用OpenCV讀入一張文件中默認(rèn)格式的彩色圖像,并查看其通道結(jié)構(gòu)。
import cv2 as cv import numpy as np # 讀入彩色圖像 img = cv.imread('test.jpg') # 獲取圖像通道數(shù) print("Channels:", img.shape[2])
圖像從左到右依次是紅色、綠色和藍(lán)色通道,每個(gè)通道都是8位無符號(hào)整數(shù)。如果它們的值相等,這個(gè)像素就會(huì)有類似灰度的效果。
像素級(jí)灰度化處理
在將圖像轉(zhuǎn)換為灰度圖像之前,我們需要先了解一下關(guān)于顏色空間的概念和轉(zhuǎn)換方法。
色彩空間(Color Space)指的是三維坐標(biāo)系統(tǒng)中用來表示顏色的極坐標(biāo)或直角坐標(biāo)系。RGB、HSV和YUV是應(yīng)用廣泛的幾種顏色空間,其中RGB顏色空間用于描述彩色圖像中像素色彩分量的三基色分量。而對(duì)于灰度圖像而言,則只考慮亮度(Luminance)分量,也就是RGB三基色分量的平均值:
gray = 0.299R + 0.587G + 0.114B
因此,我們可以使用上述公式將三基色分量帶入到圖像灰度化的計(jì)算中。
# 圖像灰度化-平均值法 def gray_avg(img): return cv.cvtColor(img, cv.COLOR_BGR2GRAY) # 圖像灰度化-加權(quán)分量法 def gray_weighted(img): b, g, r = cv.split(img) gray = cv.addWeighted(cv.addWeighted(b, 0.114, g, 0.587, 0), 0.299, r, 0.299, 0) return gray
不同算法之間的效果比較
在本例中,我們使用兩種不同的灰度化算法:平均值法和加權(quán)分量法。接下來我們將對(duì)這兩種算法進(jìn)行比較。
# 顯示原始圖像 cv.imshow('Original', img) # 顯示平均值法灰度化效果 gray = gray_avg(img) cv.imshow('Average Gray', gray) # 顯示加權(quán)分量法灰度化效果 gray_weighted = gray_weighted(img) cv.imshow('Weighted Gray', gray_weighted) cv.waitKey(0) cv.destroyAllWindows()
圖像灰度化的輸出和顯示
最后,我們可以將灰度化后的圖像保存為新文件,并在窗口中顯示。
# 寫入灰度化后結(jié)果 cv.imwrite('gray_image.jpg', gray_weighted) # 在窗口中顯示結(jié)果 cv.imshow('Weighted Gray', gray_weighted) cv.waitKey(0) cv.destroyAllWindows()
除了保存和顯示灰度化后的圖像外,我們還可以觀察到在平均值法和加權(quán)分量法之間各自產(chǎn)生的效果,在原始圖像上可以查看與理解像素值的變化。
以上就是詳解如何使用OpenCV和像素處理圖像灰度化的詳細(xì)內(nèi)容,更多關(guān)于OpenCV 像素圖像灰度化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python通過Manager方式實(shí)現(xiàn)多個(gè)無關(guān)聯(lián)進(jìn)程共享數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了Python通過Manager方式實(shí)現(xiàn)多個(gè)無關(guān)聯(lián)進(jìn)程共享數(shù)據(jù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11python反編譯學(xué)習(xí)之字節(jié)碼詳解
這篇文章主要給大家介紹了關(guān)于python反編譯學(xué)習(xí)之字節(jié)碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05python數(shù)據(jù)類型之間怎么轉(zhuǎn)換技巧分享
在本篇文章里小編給大家分享的是關(guān)于python數(shù)據(jù)類型之間怎么轉(zhuǎn)換實(shí)例以及小技巧內(nèi)容,有興趣的朋友們參考下。2019-08-08Flask框架通過Flask_login實(shí)現(xiàn)用戶登錄功能示例
這篇文章主要介紹了Flask框架通過Flask_login實(shí)現(xiàn)用戶登錄功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了flask框架使用Flask_login實(shí)現(xiàn)用戶登陸功能的具體操作步驟、相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2018-07-07