【1】引言
前序學習進程中,對圖像的操作均基于各個像素點上的BGR值不同而展開。
對于彩色圖像,每個像素點上的BGR值為三個整數,因為是三通道圖像;對于灰度圖像,各個像素上的BGR值是一個整數,因為這是單通道圖像。
如果對這部分內容暫時回憶不起來,可以通過鏈接回憶:
python學opencv|讀取圖像(九)用numpy創建黑白相間灰度圖_numpy生成全黑圖片-CSDN博客
python學opencv|讀取圖像(十)用numpy創建彩色圖像_cv2 通過numpy創建圖像-CSDN博客
不過實際追溯下來,圖像的大小確定后,像素就確定了,真正操作的都是像素點上的BGR值。
所以,在前序的圖像疊加效果原理追溯中,獲得疊加效果的根本原因都是因為各個函數執行了對BGR值的運算操作:
python學opencv|讀取圖像(四十四)原理探究:bitwise_and()函數實現圖像按位與運算-CSDN博客
按位計算過程是非常詳細的圖像疊加過程,如果只想對單張圖像操作,有時候可以通過直接修改單張圖像的BGR值實現圖像調整。
本次文章就先從最簡單的開始:通過調用cv2.blur()函數,把各個像素點的BGR值取平均值的方法,實現圖像的色彩調整。
【2】官網教程
點擊下方鏈接,直達cv2.blur()函數的官網頁面:
OpenCV: Image Filtering
cv2.blur()函數的官網頁面的解釋為:
圖1? cv2.blur()函數的官網頁面
相應的,cv2.blur()函數的參數解釋為:
void cv::blur???? (????
??????? InputArray???? src,?????????????????????????????????? #輸入圖像
??????? OutputArray???? dst,????????????????????????????? ? #輸出圖像
??????? Size???? ksize,???????????????????????????????????? ? ? #計算圖像均值像素核大小
??????? Point???? anchor = Point(-1,-1),?????????????? #圖像像素核錨點,會自動計算,為可選參數
??????? int???? borderType = BORDER_DEFAULT )?? #可選參數,邊界樣式,為可選參數
【3】代碼測試
首先是引入模塊和圖像:
import cv2 as cv # 引入CV模塊# 讀取圖片
srcm = cv.imread('srcx.png') # 讀取圖像srcx.png
然后對圖像做均值計算:
#均值計算
src1 = cv.blur(srcm,(3,3)) # 圖像取平均值,像素核大小為(3,3)
src2 = cv.blur(srcm,(5,5)) # 圖像取平均值,像素核大小為(5,5)
src3 = cv.blur(srcm,(7,7)) # 圖像取平均值,像素核大小為(7,7)
然后顯示和保存圖像:
# 顯示結果
cv.imshow('srcm ', srcm)
cv.imshow('src1 ', src1)
cv.imshow('src2 ', src2)
cv.imshow('src3 ', src3)
cv.imwrite('src1.png',src1)
# 窗口控制
cv.waitKey() # 圖像不關閉
cv.destroyAllWindows() # 釋放所有窗口
代碼運行相關的圖像有:
圖2 初始圖像srcx.png
圖3 均值圖像src1.png? 像素核(3,3)
圖4 均值圖像src2.png? 像素核(5,5)
圖5 均值圖像src3.png? 像素核(7,7)
由圖2到圖5可見,隨著像素核的增大,圖像越來越模糊。這提醒我們,控制像素核的大小,可以進一步控制圖像的模糊程度。
【4】細節說明
像素核使用奇數大小會比較好,因為奇數大小會在最中間圍成一個方格,這個方格就是核心方格,均值計算的值直接賦給這個核心方格就可以。
【5】總結
掌握了python+opencv實現調用cv2.blur()函數實現圖像BGR值平均處理的技巧。
?
?