<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
影象點運算(Point Operation)指對於一幅輸入影象,將產生一幅輸出影象,輸出影象的每個畫素點的灰度值由輸入畫素點決定。點運算實際上是灰度到灰度的對映過程,通過對映變換來達到增強或者減弱影象的灰度。還可以對影象進行求灰度直方圖、線性變換、非線性變換以及影象骨架的提取。它與相鄰的畫素之間沒有運算關係,是一種簡單和有效的影象處理方法[1]。
影象的灰度變換可以通過有選擇的突出影象感興趣的特徵或者抑制影象中不需要的特徵,從而改善影象的質量,凸顯影象的細節,提高影象的對比度。它也能有效地改變影象的直方圖分佈,使影象的畫素值分佈更為均勻[2-3]。它在實際中有很多的應用:
設輸入影象為A(x,y),輸出影象為B(x,y),則點運算可以表示為:
影象點運算與幾何運算存在差別,不會改變影象內畫素點之間的空間位置關係。同時與區域性(領域)運算也存在差別,輸入畫素和輸出畫素一一對應。
影象灰度化是將一幅彩色影象轉換為灰度化影象的過程。彩色影象通常包括R、G、B三個分量,分別顯示出紅綠藍等各種顏色,灰度化就是使彩色影象的R、G、B三個分量相等的過程。灰度影象中每個畫素僅具有一種樣本顏色,其灰度是位於黑色與白色之間的多級色彩深度,灰度值大的畫素點比較亮,反之比較暗,畫素值最大為255(表示白色),畫素值最小為0(表示黑色)。
假設某點的顏色由RGB(R,G,B)組成,常見灰度處理演演算法如表11-1所示:
表11-1中Gray表示灰度處理之後的顏色,然後將原始RGB(R,G,B)顏色均勻地替換成新顏色RGB(Gray,Gray,Gray),從而將彩色圖片轉化為灰度影象。一種常見的方法是將RGB三個分量求和再取平均值,但更為準確的方法是設定不同的權重,將RGB分量按不同的比例進行灰度劃分。比如人類的眼睛感官藍色的敏感度最低,敏感最高的是綠色,因此將RGB按照0.299、0.587、0.144比例加權平均能得到較合理的灰度影象,如公式11-2所示[4-6]。
在日常生活中,我們看到的大多數彩色影象都是RGB型別,但是在影象處理過程中,常常需要用到灰度影象、二值影象、HSV、HSI等顏色,OpenCV提供了cvtColor()函數實現這些功能。其函數原型如下所示:
dst = cv2.cvtColor(src, code[, dst[, dstCn]])
該函數的作用是將一個影象從一個顏色空間轉換到另一個顏色空間,其中,RGB是指Red、Green和Blue,一副影象由這三個通道(channel)構成;Gray表示只有灰度值一個通道;HSV包含Hue(色調)、Saturation(飽和度)和Value(亮度)三個通道。
在OpenCV中,常見的顏色空間轉換標識包括CV_BGR2BGRA、CV_RGB2GRAY、CV_GRAY2RGB、CV_BGR2HSV、CV_BGR2XYZ、CV_BGR2HLS等。下面是呼叫cvtColor()函數將影象進行灰度化處理的程式碼。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np #讀取原始圖片 src = cv2.imread('luo.png') #影象灰度化處理 grayImage = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY) #顯示影象 cv2.imshow("src", src) cv2.imshow("result", grayImage) #等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()
輸出結果如圖11-1所示,左邊是彩色的“小珞珞”原圖,右邊是將彩色影象進行灰度化處理之後的灰度圖。其中,灰度圖將一個畫素點的三個顏色變數設定為相等(R=G=B),此時該值稱為灰度值。
同樣,可以呼叫如下核心程式碼將彩色影象轉換為HSV顏色空間,其輸出結果如圖11-2所示。
grayImage = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
下面程式碼對比了九種常見的顏色空間,包括BGR、RGB、GRAY、HSV、YCrCb、HLS、XYZ、LAB和YUV,並回圈顯示處理後的影象。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #讀取原始影象 img_BGR = cv2.imread('luo.png') img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB) #BGR轉換為RGB img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY) #灰度化處理 img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV) #BGR轉HSV img_YCrCb = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YCrCb) #BGR轉YCrCb img_HLS = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HLS) #BGR轉HLS img_XYZ = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2XYZ) #BGR轉XYZ img_LAB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2LAB) #BGR轉LAB img_YUV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YUV) #BGR轉YUV #呼叫matplotlib顯示處理結果 titles = ['BGR', 'RGB', 'GRAY', 'HSV', 'YCrCb', 'HLS', 'XYZ', 'LAB', 'YUV'] images = [img_BGR, img_RGB, img_GRAY, img_HSV, img_YCrCb, img_HLS, img_XYZ, img_LAB, img_YUV] for i in range(9): plt.subplot(3, 3, i+1), plt.imshow(images[i], 'gray') plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show()
其執行結果如圖11-3所示:
前面講述了呼叫OpenCV中cvtColor()函數實現影象灰度化的處理,接下來講解基於畫素操作的影象灰度化處理方法,主要是最大值灰度處理、平均灰度處理和加權平均灰度處理方法。
該方法的灰度值等於彩色影象R、G、B三個分量中的最大值,公式如下:
其方法灰度化處理後的灰度圖亮度很高,實現程式碼如下。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #讀取原始影象 img = cv2.imread('luo.png') #獲取影象高度和寬度 height = img.shape[0] width = img.shape[1] #建立一幅影象 grayimg = np.zeros((height, width, 3), np.uint8) #影象最大值灰度處理 for i in range(height): for j in range(width): #獲取影象R G B最大值 gray = max(img[i,j][0], img[i,j][1], img[i,j][2]) #灰度影象素賦值 gray=max(R,G,B) grayimg[i,j] = np.uint8(gray) #顯示影象 cv2.imshow("src", img) cv2.imshow("gray", grayimg) #等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()
其輸出結果如圖11-4所示,其處理效果的灰度偏亮。
該方法的灰度值等於彩色影象R、G、B三個分量灰度值的求和平均值,其計算公式如公式(11-4)所示:
平均灰度處理方法實現程式碼如下。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #讀取原始影象 img = cv2.imread('luo.png') #獲取影象高度和寬度 height = img.shape[0] width = img.shape[1] #建立一幅影象 grayimg = np.zeros((height, width, 3), np.uint8) #影象平均灰度處理方法 for i in range(height): for j in range(width): #灰度值為RGB三個分量的平均值 gray = (int(img[i,j][0]) + int(img[i,j][1]) + int(img[i,j][2])) / 3 grayimg[i,j] = np.uint8(gray) #顯示影象 cv2.imshow("src", img) cv2.imshow("gray", grayimg) #等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()
其輸出結果如圖11-5所示:
該方法根據色彩重要性,將三個分量以不同的權值進行加權平均。由於人眼對綠色的敏感最高,對藍色敏感最低,因此,按下式對RGB三分量進行加權平均能得到較合理的灰度影象。
加權平均灰度處理方法實現程式碼如下所示:
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #讀取原始影象 img = cv2.imread('luo.png') #獲取影象高度和寬度 height = img.shape[0] width = img.shape[1] #建立一幅影象 grayimg = np.zeros((height, width, 3), np.uint8) #影象平均灰度處理方法 for i in range(height): for j in range(width): #灰度加權平均法 gray = 0.30 * img[i,j][0] + 0.59 * img[i,j][1] + 0.11 * img[i,j][2] grayimg[i,j] = np.uint8(gray) #顯示影象 cv2.imshow("src", img) cv2.imshow("gray", grayimg) #等待顯示 cv2.waitKey(0) cv2.destroyAllWindows()
其輸出結果如圖11-6所示:
本文主要講解影象點運算的灰度化處理,詳細介紹常用的灰度化處理方法,並分享了影象顏色空間相互轉換,以及三種灰度轉換演演算法的實現。通過灰度處理,我們能有效將彩色影象轉換為灰度圖,為後續的邊緣提取等處理提供支撐,也可能實現影象處理軟體最簡單的彩色圖轉黑白的效果。
以上就是Python影象運算之影象點運算與灰度化處理詳解的詳細內容,更多關於Python 影象運算的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45