<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
實現計算機視覺任務的過程中,不可避免地需要對影象進行讀寫操作以及影象預處理操作,下面介紹兩個常用的Python影象處理庫:OpenCV和Pillow。
OpenCV全稱是由英特爾公司資助的開源計算機視覺庫。
OpenCV是模組結構的,有以下主要模組。
作為Python2的第三方影象處理庫是Pillow的前身。隨著Python3的更新,PIL移植到Python3更名為Pillow。與OpenCV一樣,Pillow也是模組結構,主要包括以下結構。
二值影象只有黑白兩種顏色,如圖所示。影象中的每個畫素只能是黑或白,沒有中間的過渡。因此二值影象的畫素值只能為0或1,0表示黑色,1表示白色。
實際應用中常用的顏色空間很多,通常使用3個獨立的變數對顏色進行描述,例如RGB、HSV、YUV等。
一個影象的不同的顏色空間是可以轉換的,cv2.cvtColor可以實現顏色的轉換。
• cv2.COLOR_BGR2GRAY
• cv2.COLOR_BGR2RGB
• cv2.COLOR_BGR2HSV
• cv2.COLOR_BGR2YUV
• cv2.COLOR_BGR2HLS
通過OpenCV庫對數位影像進行處理時,涉及到的基礎操作包括讀取、顯示、寫出影象檔案。
在OpenCV庫中,影象資料是以NumPy陣列的形式存在。
在python的OpenCV中,通過cv2.imread()函數讀入影象資料,其基本使用格式如下。cv2.imread(filename, flags)
在預設情況下通過cv2.imread()
函數讀入影象資料為3通道的彩色圖,畫素值為8位元的非負整數,影象資料以NumPy中ndarray的方式存在。
如果定義了cv2.imread()讀入模式為cv2.IMREAD_GRAYSCALE那麼讀入影象為單通道的灰度圖。
需要注意的是,通過OpenCV讀入彩色影象資料的顏色通道順序為BGR(藍、綠、紅)並非常用的RGB(紅、綠、藍)順序。
在OpenCV中,讀取到的影象陣列維度可以表示為:
(高,寬,通道數)即(height, width, channel)。OpenCV影象座標與常規的數學座標有區別,左上角位置為座標原點。
• 在Windows【畫圖】工具中,帽檐紅點座標為(248, 102),但在OpenCV中畫素位置應為(102, 248)。
• X軸 == 列位置 == 影象寬
• Y軸 == 行位置 == 影象高
import cv2 import matplotlib.pyplot as plt import numpy # 讀寫影象 img = cv2.imread(filename='lena.jpg', flags=cv2.IMREAD_GRAYSCALE) img.shape # (377, 373) img.dtype # dtype('uint8') # 影象展示 cv2.imshow(winname='lena', mat=img) cv2.waitKey(0) # 影象儲存 cv2.imwrite(filename='test_img.jpg', img=img)
影象平移變換將一幅影象中的所有畫素點都按照給定的偏移量在水平方向(沿x軸方向)或垂直方向(沿y軸方向)移動,是影象幾何變換中較為簡單的一種變換。
影象平移原理示意圖如下圖所示。
假設對點P_0 (x_0,y_0 )進行平移後得到點P(x,y),其中x方向的平移量為∆x,y方向的平移量為∆y ,則點P(x,y)的座標如下式。
利用齊次座標表示影象平移變換前後點P_0 (x_0,y_0 )到點P(x,y)的關係如下式所示。
實現步驟:
1. 定義平移變換矩陣: 例如:np.float32([[1,0,50], [0,1,100]])
• [1,0,50]表示在x軸方向移動50個單位
• [0,1,100]表示在y軸方向移動100個單位
2. 執行轉換:cv2.warpAffine (src, M, dsize)
通過OpenCV實現影象平移操作,結果如下圖所示,(a)為原圖和(b)為平移後影象。
import cv2 import matplotlib.pyplot as plt import numpy as np img = cv2.imread('lena.jpg') height, width, channel = img.shape # 影象平移 # 1、定義平移變換矩陣 M = np.float32([[1,0,50], [0,1,100]]) # 2、執行平移變換 img_tran = cv2.warpAffine(src=img, M=M, dsize=(height, width)) cv2.imshow('image translation', img_tran) cv2.waitKey(0)
影象旋轉(Rotation)是指影象以某一點為中心旋轉一定的角度形成一幅新的影象的過程。通常是以影象的中心為圓心旋轉,將影象中的所有畫素點都旋轉一個相同的角度。
影象旋轉原理如圖所示,將點(x_0,y_0)繞原點o順時針旋轉至點(x_1,y_1 ),其中a為旋轉角,r為點(x_0,y_0 )到原點的距離, b為原點o到點(x_0,y_0 )的線段與x軸之間的夾角。在旋轉過程中, r保持不變。
設旋轉前,x_0、y_0的座標分別為x_0=r cosb、y_0=r sinb,當旋轉a角度後,座標x_1、y_1的值分別如下式所示。
上式的矩陣的形式如下式所示。
實現步驟:
1. 計算旋轉變換矩陣: cv2.getRotationMatrix2D (center, angle, scale)
2. 執行轉換:cv2.warpAffine (src, M, dsize)
通過OpenCV實現影象旋轉,得到的效果如圖所示。
# 影象旋轉 # 1、定義旋轉變換矩陣 M = cv2.getRotationMatrix2D(center=(height*0.5, width*0.5), # 旋轉的中心位置座標 angle=45, # 旋轉的角度 scale=0.8 # 縮放比例 ) # 2、執行旋轉變換 img_rotation = cv2.warpAffine(img, M, dsize=(height,width)) cv2.imshow('image_rotation', img_rotation) cv2.waitKey(0)
影象比例縮放是指將給定的影象在x軸方向按比例縮放f_x倍,在y軸方向按比例縮放f_y倍,從而獲得一幅新的影象。如果f_x=f_y,即x軸方向和y軸方向縮放的比率相同,此比例縮放為影象的全比例縮放。如果f_x≠f_y,那麼影象的比例縮放會改變原始影象的畫素間的相對位置,產生幾何畸變。
在OpenCV中cv2.resize(src, dsize, fx, fy, interpolation)可以實現影象縮放。
具體實現影象縮放有多種插值方法,OpenCV的resize函數提供瞭如下5種常見方法。
• 最鄰近插值:cv2.INTER_NEAREST
• 雙線性插值:cv2.INTER_LINEAR
• 區域插值:cv2.INTER_AREA
• 三次樣條插值:cv2.INTER_CUBIC
• Lanczos插值:cv2.INTER_LANCZOS4
# 影象縮放 # 1、直接指定縮放大小 img_res = cv2.resize(img, dsize=(244,244)) img_res.shape # (244, 244, 3) cv2.imshow('image_resize', img_res) cv2.waitKey(0) # 2、最近鄰插值 img_near = cv2.resize(img, dsize=None, fx=1.5, fy=1, interpolation=cv2.INTER_NEAREST) cv2.imshow('img_near', img_near) cv2.waitKey(0)
到此這篇關於Python詳細講解影象處理的而兩種庫OpenCV和Pillow的文章就介紹到這了,更多相關Python影象處理內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45