[Python影象處理] 三.獲取影象屬性、興趣ROI區域及通道處理
該系列文章是講解Python OpenCV影象處理知識,前期主要講解影象入門、OpenCV基礎用法,中期講解影象處理的各種演算法,包括影象銳化運算元、影象增強技術、影象分割等,後期結合深度學習研究影象識別、影象分類應用。希望文章對您有所幫助,如果有不足之處,還請海涵~
同時推薦作者的C++影象系列知識:
[數字影象處理] 一.MFC詳解顯示BMP格式圖片
[數字影象處理] 二.MFC單文件分割視窗顯示圖片
[數字影象處理] 三.MFC實現影象灰度、取樣和量化功能詳解
[數字影象處理] 四.MFC對話方塊繪製灰度直方圖
[數字影象處理] 五.MFC影象點運算之灰度線性變化、灰度非線性變化、閾值化和均衡化處理詳解
[數字影象處理] 六.MFC空間幾何變換之影象平移、映象、旋轉、縮放詳解
[數字影象處理] 七.MFC影象增強之影象普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解
前文參考:
[Python影象處理] 一.影象處理基礎知識及OpenCV入門函式
[Python影象處理] 二.OpenCV+Numpy庫讀取與修改畫素
本篇文章主要講解Python呼叫OpenCV獲取影象屬性,擷取感興趣ROI區域,處理影象通道。全文均是基礎知識,希望對您有所幫助。知識點如下:
1.獲取影象屬性
2.獲取感興趣ROI區域
3.影象通道處理
PSS:2019年1~2月作者參加了CSDN2018年部落格評選,希望您能投出寶貴的一票。我是59號,Eastmount,楊秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index
一.獲取影象屬性
1.形狀-shape
通過shape關鍵字獲取影象的形狀,返回包含行數、列數、通道數的元祖。其中灰度影象返回行數和列數,彩色影象返回行數、列數和通道數。如下圖所示:
# -*- coding:utf-8 -*-
import cv2
import numpy
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#獲取影象形狀
print(img.shape)
#顯示影象
cv2.imshow("Demo", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如下圖所示:(445L, 670L, 3L),該圖共445行、670列畫素,3個通道。
2.畫素數目-size
通過size關鍵字獲取影象的畫素數目,其中灰度影象返回行數 * 列數,彩色影象返回行數 * 列數 * 通道數。程式碼如下:
# -*- coding:utf-8 -*-
import cv2
import numpy
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#獲取影象形狀
print(img.shape)
#獲取畫素數目
print(img.size)
輸出結果:
(445L, 670L, 3L)
894450
3.影象型別-dtype
通過dtype關鍵字獲取影象的資料型別,通常返回uint8。程式碼如下:
# -*- coding:utf-8 -*-
import cv2
import numpy
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#獲取影象形狀
print(img.shape)
#獲取畫素數目
print(img.size)
#獲取影象型別
print(img.dtype)
輸出結果:
(445L, 670L, 3L)
894450
uint8
二.獲取感興趣ROI區域
ROI(Region of Interest)表示感興趣區域。它是指從被處理影象以方框、圓形、橢圓、不規則多邊形等方式勾勒出需要處理的區域。可以通過各種運算元(Operator)和函式求得感興趣ROI區域,並進行影象的下一步處理,被廣泛應用於熱點地圖、人臉識別、影象分割等領域。
通過畫素矩陣可以直接獲取ROI區域,如img[200:400, 200:400]。
程式碼如下:
# -*- coding:utf-8 -*-
import cv2
import numpy as np
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#定義200*100矩陣 3對應BGR
face = np.ones((200, 100, 3))
#顯示原始影象
cv2.imshow("Demo", img)
#顯示ROI區域
face = img[200:400, 200:300]
cv2.imshow("face", face)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如下圖所示:
下面將提取的ROI影象進行融合實驗,程式碼如下:
# -*- coding:utf-8 -*-
import cv2
import numpy as np
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#定義300*100矩陣 3對應BGR
face = np.ones((200, 200, 3))
#顯示原始影象
cv2.imshow("Demo", img)
#顯示ROI區域
face = img[100:300, 150:350]
img[0:200,0:200] = face
cv2.imshow("face", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
將提取的頭部融合至影象左上角部分,如下圖所示:
如果想將兩張影象進行融合,只需再讀取一張影象即可,方法原理類似。 實現程式碼如下:
# -*- coding:utf-8 -*-
import cv2
import numpy as np
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
test = cv2.imread("test3.jpg", cv2.IMREAD_UNCHANGED)
#定義300*100矩陣 3對應BGR
face = np.ones((200, 200, 3))
#顯示原始影象
cv2.imshow("Demo", img)
#顯示ROI區域
face = img[100:300, 150:350]
test[400:600,400:600] = face
cv2.imshow("Pic", test)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如下圖所示:
三.影象通道處理
1.通道拆分
OpenCV讀取的彩色影象由B、G、R三原色組成,可以通過下面程式碼獲取不同的通道。
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
也可以使用split()函式拆分通道,下面是拆分不同通道再顯示的程式碼。
# -*- coding:utf-8 -*-
import cv2
import numpy as np
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#拆分通道
b, g, r = cv2.split(img)
#顯示原始影象
cv2.imshow("B", b)
cv2.imshow("G", g)
cv2.imshow("R", r)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如下圖所示:
2.通道合併
影象通道合併主要呼叫merge()函式實現,核心程式碼如下:
m = cv2.merge([b, g, r])
# -*- coding:utf-8 -*-
import cv2
import numpy as np
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#拆分通道
b, g, r = cv2.split(img)
#合併通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如下:
注意,如果是合併[r,g,b]三通道,則顯示如下所示,因OpenCV是按照BGR進行讀取的。
b, g, r = cv2.split(img)
m = cv2.merge([r, g, b])
cv2.imshow(“Merge”, m)
同時,可以提取影象的不同顏色,提取B顏色通道,G、B通道設定為0,則顯示藍色。程式碼如下所示:
# -*- coding:utf-8 -*-
import cv2
import numpy as np
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
rows, cols, chn = img.shape
#拆分通道
b = cv2.split(img)[0]
g = np.zeros((rows,cols),dtype=img.dtype)
r = np.zeros((rows,cols),dtype=img.dtype)
#合併通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
藍色通道輸出結果如下所示:
綠色通道核心程式碼及輸出結果如下所示:
rows, cols, chn = img.shape
b = np.zeros((rows,cols),dtype=img.dtype)
g = cv2.split(img)[1]
r = np.zeros((rows,cols),dtype=img.dtype)
m = cv2.merge([b, g, r])
紅色通道修改方法與上面類似。
希望文章對大家有所幫助,如果有錯誤或不足之處,還請海涵。
(By:Eastmount 2018-08-29 早10點 https://blog.csdn.net/Eastmount/)
相關文章
- 跟我學Python影像處理丨獲取影像屬性、興趣ROI區域及通道處理Python
- Python 影像處理 OpenCV (3):影像屬性、影像感興趣 ROI 區域及通道處理PythonOpenCV
- [Python影象處理] 七.影象閾值化處理及演算法對比Python演算法
- [Python影象處理] 一.影象處理基礎知識及OpenCV入門函式PythonOpenCV函式
- matlab感興趣區域處理Matlab
- [Python影象處理] 八.影象腐蝕與影象膨脹Python
- [Python影象處理] 五.影象融合、加法運算及影象型別轉換Python型別
- 影象處理之影象增強
- [Python影象處理] 六.影象縮放、影象旋轉、影象翻轉與影象平移Python
- 數字影象處理DIP
- [影象處理] Python+OpenCV實現車牌區域識別及Sobel運算元PythonOpenCV
- 實戰 | 用Python做影象處理(一)Python
- 影象中的畫素處理
- 數字影象處理-第一節
- 影象處理庫GPUImage簡單使用GPUUI
- 【筆記】基於Python的數字影象處理筆記Python
- [Python影象處理] 二.OpenCV+Numpy庫讀取與修改畫素PythonOpenCV
- 影象處理的濾鏡演算法演算法
- 影象識別及處理相關資料集介紹
- [Python影象處理] 九.形態學之影象開運算、閉運算、梯度運算Python梯度
- [Python影象處理] 十.形態學之影象頂帽運算和黑帽運算Python
- Luminar 4 for MacOS影象後期處理軟體Mac
- [Python影象處理] 四.影象平滑之均值濾波、方框濾波、高斯濾波及中值濾波Python
- Python基礎教程:Day15-影象和辦公文件處理Python
- render函式處理動態獲取img的src屬性函式
- 影象處理1--傅立葉變換(Fourier Transform )ORM
- 如何在Tensorflow.js中處理MNIST影象資料JS
- Python Cookie HTTP獲取cookie並處理PythonCookieHTTP
- 【影象處理】人臉美顏演算法初次嘗試演算法
- 值得珍藏機器視覺10大常用影象處理庫視覺
- [Python影象處理] 十一.灰度直方圖概念及OpenCV繪製直方圖Python直方圖OpenCV
- WebComponent+WebGl的實時影象處理彈幕播放器Web播放器
- 黑洞圖片的背後,是影象處理技術的成熟!
- Python教程分享:Python Cookie HTTP獲取cookie並處理PythonCookieHTTP
- python獲取頁面亂碼時的處理Python
- OpenCV計算機視覺學習(12)——影像量化處理&影像取樣處理(K-Means聚類量化,區域性馬賽克處理)OpenCV計算機視覺聚類
- 圖片區域點選處理
- 處理陣列中某一屬性陣列