CV:基本概念和工具

計算機視覺

計算機視覺, 就是給計算機安裝上眼睛(照相機)和大腦(算法),讓計算機能夠感知環境。計算機視覺的很多算法,都與機器學習、深度學習這些人工智能的算法相同,下面的圖很形象地表示除了這種概念的從屬關係。
在這裏插入圖片描述

像素,顏色,通道,圖像和顏色空間的概念

計算機的三原色是紅色綠色和藍色。
RGB顏色表:https://www.rapidtables.com/web/color/RGB_Color.html
圖像的分辨率(resolution):
例如一個8001200的圖像,通常是指這個圖像網格有800列,1200行,共8001200=960000個像素。具體這個圖像有多大,取決於像素點有多大,或者說叫做PPI(pixels per inch)的設置,通常PPI都在200-400的範圍內。
例如8001200像素的圖片,大小是46inch,那麼這個圖像的PPI就是200

圖像文件後綴

windows 位圖: .bmp, .dib
JPEG文件:.jpeg, .jpg, .jpe
JPEG 2000文件: .jp2
portable network graphics: .png
portable image format: .pbm, .pgm, .ppm
Tiff: .tiff, .tif

有損壓縮和無損壓縮

Python的計算機視覺庫

PIL:python 圖像處理類庫

PIL(Python Image Library)提供了通用的圖像處理功能,包括大量基本圖像操作,例如縮放、剪裁、旋轉、顏色轉換等。

載入PIL庫

from PIL import Image
  • 圖像歸檔(Image Archives)

    PIL非常適合於圖像歸檔以及圖像的批處理任務。你可以使用PIL創建縮略圖,轉換圖像格式,打印圖像等等。

  • 圖像展示(Image Display)

    PIL較新的版本支持包括Tk PhotoImage,BitmapImage還有Windows DIB等接口。PIL支持衆多的GUI框架接口,可以用於圖像展示。

  • 圖像處理(Image Processing)

    PIL包括了基礎的圖像處理函數,包括對點的處理,使用衆多的卷積核(convolution kernels)做過濾(filter),還有顏色空間的轉換。PIL庫同樣支持圖像的大小轉換,圖像旋轉,以及任意的仿射變換。PIL還有一些直方圖的方法,允許你展
    示圖像的一些統計特性。這個可以用來實現圖像的自動對比度增強,還有全局的統計分析等。

PIL庫只支持python2.x版本,對於python3.x版本,對應的PIL庫更名爲pillow。PIL庫的幫助文檔地址:https://pillow-cn.readthedocs.io/zh_CN/latest/index.html

基本操作命令

基本操作 命令 例子
讀取圖像 Image.open() im=Image.open(‘test.png’)
保存圖像/圖像格式轉換 Image.save() Image.open(infile).save(outfile)
顏色轉換 Image.convert() Image.convert(‘L’) 轉換爲灰度圖像
創建縮略圖 Image.thumbmail() im.thumbnail((size))
剪裁 im.crop(box), box是區域四元組=(左,下,右,上) region=im.crop((100,100,400,400))
調整尺寸 im.resize(size) , size是尺寸二元組=(長,寬) im.resize((128,128))
旋轉 im.rotate(deg) im.rotate(45)

openCV

openCV是計算機視覺領域最有名的開源項目,源代碼是用C++寫的,算法執行效率非常高。OpenCV提供了python接口,可以用import cv2方便地調用。

在這裏插入圖片描述
core =.核心庫,基本的數據結構,核心函數
imgproc = 預處理
imgcodecs = 圖像輸入輸出
videoio = 視頻輸入輸出
highgui = UI能力的交互接口
video = 視頻分析
calib3d = 攝像頭校準和3D重建
features2d : 2D 特徵
objdetect : 物體檢測
dnn: 深度神經網絡
ml: 機器學習 MLL 分類、迴歸和聚類算法
flann: fast library for approximate nearest neighbors 快速最近鄰搜索算法
photo:計算機成像學
stitching: stitching pipeline
shape: 圖像距離和匹配
superres: 圖像的分辨率增強
videostab: 視頻穩定
viz: 3D可視化工具
low-level process: 去噪
iamge sharpening銳化
illumination normalization 模糊的正則化
perspective correction 角度修正
mid-level process: 尋找數據共性特徵
high-level process:產品級應用,例如人臉識別,情緒識別,遠程人臉圖像心率計算

openCV的座標系統

在openCV中,左上角是原點,但是序號從0開始,也就是說左上角第一個像素點的座標是(0,0),而不是(1,1)

在這裏插入圖片描述

讀取圖像 img = cv2.imread(‘logo.png’)
圖像行列: img.shape
圖像像素數量 img.size
數據類型:img.dtype
顯示圖像: cv2.imshow(‘original image’, img)

在這裏插入圖片描述
例如:
某個像素的BGR數據: (b, g, r) = img[6, 40]
只要藍色: b=img[6,40]
修改某個像素處的BGR: img[6,40] = (0, 0, 255)
切出圖像的某一個部分: top_left = img[0:50, 0:50]

灰度圖: 灰度圖只有一個channel。

gray_img = cv2.imread('logo.png', cv2.IMREAD_GRAYSCALE)

i = gray_img[6, 40]
gray_img[6, 40] = 0

雖然在openCV中色彩通道的順序是BGR,但也有不少python圖是用了RGB的順序,例如
matplotlib。

按照色彩通道提取圖像數據:

img_cv = cv2.imread(‘logo.png’)
b, g, r = cv2.split(img_cv)

多個色彩通道合成圖像:
img_matplotlib = cv2.merge([r,g,b])
用matplotlib繪圖,就應該用img_matplotlib,才能得到正確的圖像
plt.imshow(img_matplotlib)
用openCV繪圖,則應該按照BGR的順序合成圖像:

img_opencv = cv2.merge([b,g,r])
cv2.imshow(img_opencv2)
```. 


## openCV的座標系統
在openCV中,左上角是原點,但是序號從0開始,也就是說左上角第一個像素點的座標是(00),而不是(11)
  
讀取圖像   img = cv2.imread(‘logo.png’)
圖像行列: img.shape
圖像像素數量 img.size
數據類型:img.dtype
顯示圖像: cv2.imshow(‘original image’, img)

某個像素的BGR數據: (b, g, r) = img[6, 40]
只要藍色: b=img[6,40]
修改某個像素處的BGR: img[6,40] = (0, 0, 255)
切出圖像的某一個部分: top_left = img[0:50, 0:50]

灰度圖: 灰度圖只有一個channel。
“gray_img = cv2.imread('logo.png', cv2.IMREAD_GRAYSCALE)
”
i = gray_img[6, 40]
gray_img[6, 40] = 0
>> 雖然在openCV中色彩通道的順序是BGR,但也有不少python圖是用了RGB的順序,例如matplotlib。
按照色彩通道提取圖像數據:
img_cv = cv2.imread(‘logo.png’)
b, g, r = cv2.split(img_cv)

. 
多個色彩通道合成圖像:
img_matplotlib = cv2.merge([r,g,b])
用matplotlib繪圖,就應該用img_matplotlib,才能得到正確的圖像
plt.imshow(img_matplotlib)
用openCV繪圖,則應該按照BGR的順序合成圖像: 
```python
img_opencv = cv2.merge([b,g,r])
cv2.imshow(img_opencv2)
```. 

cv2.waitKey(0)
cv2.destroyAllWindows()

### 處理文件和圖像
openCV 項目的輸入和輸出通常是這樣的
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20190911233623640.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhcHB5aG9yaXppb24=,size_16,color_FFFFFF,t_70)


## 其他常用庫
Scikit-image (https://scikit-image.org/) 是scikit learn的圖像處理工具箱
To work with images: NumPy, OpenCV, scikit-image, PIL Pillow, SimpleCV, Mahotas, ilastik
To work in text: NLTK, spaCy, NumPy, scikit-learn, PyTorch
To work in audio: LibROSA”
“To solve machine learning problem: pandas, scikit-learn, Orange, PyBrain, Milk
To see data clearly: Matplotlib, Seaborn, scikit-learn, Orange
To use deep learning: TensorFlow, Pytorch, Theano, Keras
To do scientific computing: SciPy
To integrate web applications: Django, Flask


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