1. 準備
進行計算機視覺的處理需要安裝相應的第三方庫,這裏直接安裝,Anaconda下的cmd運行如下指令,安裝opencv-python 、tensorflow和keras三個庫
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python keras
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow
其中關於tensorflow的下載會比較漫長(關聯的庫太多,而且還很大),建議和其他兩個分開下載,如下
2. 圖片加載
先導入有關的庫,並在jupyter notebook上進行內嵌顯示
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
2.1 絕對路徑加載
比如測試文件夾放在D盤的個人文件夾中,名稱爲1.jpg,需要加載此圖片然後打印出圖片的寬高及通道,代碼如下
image = cv2.imread('D:/個人/1.jpg')
print(f'weight: {image.shape[1]} piexls')
print(f'height: {image.shape[0]} piexls')
print(f'channels: {image.shape[2]}')
→ 輸出的結果爲:(圖片加載中不能存在中文字符)
AttributeError Traceback (most recent call last)
<ipython-input-3-d7c684f417fc> in <module>
1 image = cv2.imread('D:/個人/1.jpg')
----> 2 print(f'weight: {image.shape[1]} piexls')
3 print(f'height: {image.shape[0]} piexls')
4 print(f'channels: {image.shape[2]}')
AttributeError: 'NoneType' object has no attribute 'shape'
於是嘗試把文件放置在D盤下面的AI文件夾下,然後重新運行此命令
image = cv2.imread('D:/AI/1.jpg')
print(f'weight: {image.shape[1]} piexls')
print(f'height: {image.shape[0]} piexls')
print(f'channels: {image.shape[2]}')
→ 輸出的結果爲:(這張圖像就是博客的頭像)
weight: 1920 piexls
height: 1080 piexls
channels: 3
2.2 相對路徑加載
上面的操作存在着中文文件夾下的圖片不能正常加載的情況,爲了解決這個問題,可以使用相對路徑進行加載,比如還是在D盤個人文件夾下的1.jpg圖像。
方法一、執行代碼如下
import os
os.chdir('D:/個人')
image = cv2.imread('1.jpg')
print(f'weight: {image.shape[1]} piexls')
print(f'height: {image.shape[0]} piexls')
print(f'channels: {image.shape[2]}')
→ 輸出的結果爲:(先通過改變程序的運行路徑,然後加載相對路徑下的文件)
weight: 1920 piexls
height: 1080 piexls
channels: 3
方法二、就是直接將文件放在jupyter notebook運行路徑文件夾下,與創建的python3文件同一路徑即可
image = cv2.imread('1.jpg')
print(f'weight: {image.shape[1]} piexls')
print(f'height: {image.shape[0]} piexls')
print(f'channels: {image.shape[2]}')
→ 輸出的結果爲:
weight: 1920 piexls
height: 1080 piexls
channels: 3
上面兩種方法加載先相對路徑,本質上是一模一樣的,都是把路徑指引到程序運行的路徑下面,不過一個是程序操作,一個是手動操作的
3. 圖像查看
讀入圖像之後,可以通過matplotlib庫進行圖像的顯示,如下(注意關閉座標軸)
plt.imshow(image)
plt.axis('off')
→ 輸出的結果爲:(最開始引用了圖表內嵌的方式,這裏就不用plt.show()了)
但是會發現,色彩與原來圖像的風格是不一樣的,原因在於cv2,讀取圖像時候是以BGR的方式讀入,而matplotlib是以RGB進行顯示的,因此修改一下讀取的方式即可
new_image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
plt.imshow(new_image)
plt.axis('off')
→ 輸出的結果爲:(通過cv2裏面的BGR轉RGB進行讀取)
4. 圖像保存
這裏需要注意,保存的時候應該保存的是image變量,也就是程序剛剛讀入的圖像的變量,而不是糾正過顏色的new_image變量,因爲cv2還是會以原格式儲存
如果輸出的是new_image對象,代碼如下
cv2.imwrite('D:/AI/image.jpg',new_image)
→ 輸出的結果爲:(非正常圖像)
如果輸出的是image對象,代碼如下
cv2.imwrite('D:/AI/image.jpg',image)
→ 輸出的結果爲:(輸出正常的圖像)