【圖像處理】使用OpenCV+Python進行圖像處理入門教程(一)基礎


       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章圖像的運算,希望與各位老師和小伙伴們交流學習~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM