【影象處理】使用OpenCV進行影象處理教程(一)
OpenCV是進行影象處理的工具,也是計算機視覺領域近十幾年不斷髮展和完善的產物。面對這個已基本成熟的開源庫知識體系,我們新生代有必要不斷地總結、回顧,以新的視角快速融入計算機視覺的奧祕世界。
從這篇隨筆開始,讓我們踏上重新回顧OpenCV進行影象處理的奇妙之旅。
1 影象處理基礎
1.1 影象的讀入、顯示、儲存
#影象讀入 import cv2 img1 = cv2.imread(r'E:/python_opencv/tupian.jpg',0)
#影象顯示 cv2.imshow('tupian',img1) k = cv2.waitKey()
#影象儲存 cv2.imwrite('tupian,jpg',img1)
1.2 影象的基本表示方法
分為二值影象、灰度影象、彩色影象 這三種表示方法。
二值影象:0和1表示畫素點顏色,0為黑色,1為白色。
灰度影象:256個灰度級,用數值[0,255]表示,0為黑色,1為白色。
彩色影象:RGB色彩空間表示紅、綠、藍三種通道,數值均為[0,255]。但是在opencv中用BGR色彩空間表示。
不同的表示方法和色彩空間之間可以互相轉換。
1.3 畫素處理
畫素是構成一幅影象的基本組成單位。
二值影象和灰度影象:img[0,2]表示第0行第2列的畫素點。
彩色影象:opencv裡img[0,2]表示第0行第2列上B、G、R三個通道的畫素值,img[0,2,2]表示第0行第2列上第2個通道R的畫素值。
注1:可以使用二層或三層迴圈巢狀,對某區域內畫素值整體修改,如:
for i in range(0,50): #i表示畫素的行數 for j in range(0,100): #j表示畫素的行數 for k in range(0,3): #k表示通道數 img[i,j,k]=255 #該區域的畫素值均修改為255
注2:使用Numpy庫中的zeros()函式可以生成一個元素值都為0的陣列,如:
import numpy as np img = np.zeros((3,5,3),dtpye=np.uint8)
1.4 使用numpy訪問畫素
numpy模組中提供了item()訪問畫素值,itemset()修改畫素值
item(i,j)或item(i,j,k)
itemset((i,j),a) 或 itemset((i,j,k),a) i,j為行和列,k為彩色圖片中的通道,a為新值。如:
print('img.item(3,2,2)=',img.item(3,2,2)) #讀取原畫素值 img.itemset((3,2,2),255) #將第3行第2列R通道的畫素值修改為255
1.5 感興趣區域(Region of Interset, ROI)
如果需要使用一張圖片的某區域,可以將其定為感興趣區域(ROI),然後就能對其整體進行操作。
A = img1[10:30,50:100] #將img1的第10-30行畫素、50-100列畫素設定為ROI區域 img2[20:40,300:350] = A #將該ROI區域賦給img2的第20-40行畫素、300-350列畫素
1.6 通道操作
對通道進行操作分為通道拆分和通道合併。
(一)通道拆分:
將BGR影象中的三個通道分別拆分出來。分為索引拆分方法和函式拆分方法。
索引拆分:
#拆分為B、G、R三個通道 B = img[:,:,0] G = img[:,:,1] R = img[:,:,2]
函式拆分:
B,G,R = cv2.split(img)
(二)通道合併:
使用cv2.merge()函式將三個通道的灰度影象構成一幅彩色影象。
bgr = cv2.merge([b,g,r])
1.7 獲取影象屬性
獲取影象常用的屬性,如大小、型別等。
shape 返回影象行數、列數、通道數
size 返回影象畫素數
dtype 返回影象的資料型別
print('img.shape=',img.shape) #shape 返回影象行數、列數、通道數 print('img.size=',img.size) #size 返回影象畫素數 print('img.dtype=',img.dtype) #dtype 返回影象的資料型別
這次內容就分享到這裡了,下次繼續更新第2章影象的運算,希望與各位老師和小夥伴們交流學習~
&n