【計算機視覺】圖片的加載、查看與保存(OpenCV)

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()了)
ZG4ubmV0L2x5c184Mjg=,size_16,color_FFFFFF,t_70)
但是會發現,色彩與原來圖像的風格是不一樣的,原因在於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)

→ 輸出的結果爲:(輸出正常的圖像)
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章