1. 程式人生 > >【影象處理】使用OpenCV進行影象處理教程(一)

【影象處理】使用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