- 深度學習技術圖像處理入門
- 楊培文
- 793字
- 2019-12-06 14:13:43
3.1 讀取圖像文件進行基本操作
首先需要介紹圖像文件的存儲格式。計算機圖像可以分為矢量圖和位圖。矢量圖以代碼的形式存儲,常見的包括學術論文的統計圖、公司圖標等。這里主要討論如何處理位圖,其存儲格式包括png、jpg、tiff等,常見的包括各種手機、數碼相機拍攝的相片。而我們通常看見的gif動畫、mp4影片,也是由多個位圖按照時間排列、以固定的幀數進行播放的。
這里png、jpg、tiff格式的彩色照片,本質上都是一個三維的矩陣,即長度、寬度以及顏色(RGB,紅綠藍)。格式的文件結構都是十六進制數,分別使用了不同的圖像壓縮方法。當然解析這部分內容并不需要大家過多關注,我們可以在Python中使用現成的工具,將十六進制數格式的文件轉換成三維矩陣。我們重點講一下opencv的用法,這里使用opencv-python官網的例子。
3.1.1 使用python-opencv讀取圖片

運算結果:
#output: (342, 548, 3)
完成圖像讀取以后,可以用Python的matplotlib基本繪圖庫進行圖像的展示,如圖3-2所示。
import matplotlib.pyplot as plt %matplotlib inline
plt.imshow(img)

圖3-2 展示圖片
讀取圖片成功,這里的三維矩陣高度為342像素,寬度為548像素,使用RGB編碼。如果讀者是球迷的話,很容易會發現問題,首先這個球應該是黃色的,怎么是淺藍色?巴薩球迷更能一眼看出球襪的顏色反了,不是紅色是藍色——紅藍色反了。
出現這個問題的原因是,opencv-python默認使用BGR編碼,相對于RGB而言,色彩這個維度正好是反的。之所以這里看起來不太對勁的原因,主要還是歸功于巴薩球衣是紅藍相間的,反過來仍然是紅藍。如果是米蘭兩隊(紅黑與藍黑)這樣轉換,球隊就會弄錯了。
3.1.2 借助python-opencv進行不同編碼格式的轉換
我們可以用簡單的矩陣操作,或者直接用opencv的函數,將BGR顏色編碼轉換成RGB,如圖3-3所示。
# 方法1. 直接操作數組 fig = plt.figure(figsize=(10, 6)) ax1 = fig.add_subplot(121) ax2 = fig.add_subplot(122) ax1.imshow(img[:,:,np.array([2,1,0])]) # 方法2. 調用opencv函數 ax2.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

圖3-3 轉換后的圖片
3.1.3 借助python-opencv改變圖片尺寸
如果此時想轉換成一個小一點的黑白相片,將高度×寬度變成240×360,可以進行如下設置:
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_gray_small = cv2.resize(img_gray, (360, 240))
存儲圖片:
cv2.imwrite("gray_out.png",img_gray_small)
運算結果:
# out: True
此時,轉換成黑白相片并經過縮小后的文件已經被成功存儲了。
- PS職場達人煉成記:人人都能學會的Photoshop辦公設計技巧
- AutoCAD 2018實用教程(第5版)
- Creo 4.0中文版從入門到精通
- 剪映AI視頻剪輯:AI腳本+AI繪畫+圖文生成+數字人制作
- 突破平面Premiere Pro 2022短視頻與視頻制作
- 中文版Photoshop CS6從新手到高手·全彩版
- Designing and Implementing Linux Firewalls and QoS using netfilter, iproute2, NAT and l7/filter
- 中文版Maya 2016實用教程
- Oracle Fusion Middleware Patterns
- LaTeX論文寫作教程
- 平面設計師實戰教程
- Joomla! 1.5 JavaScript jQuery
- Microsoft SQL Server 2008 High Availability
- Building SOA/Based Composite Applications Using NetBeans IDE 6
- Adobe創意大學Premiere Pro CS5 影視剪輯師標準實訓教材