人工智慧

,一個已經被談論了幾十年的概念(最早是

圖靈

1950年

提出)。如今這幾年,相關技術的發展速度是越來越快。高大上如無人駕駛、智慧安防、AI輔助診斷,接地氣如刷臉支付、內容推薦、自動翻譯等,眾多領域藉助人工智慧的力量而進化。從百度搜索指數的變化,也能從一個側面反映出關注度在不斷上升。

OpenCV-Python,計算機視覺開發利器

而這其中,很多應用都涉及到“

計算機視覺

”這樣一個細分領域。簡單來說,就是將影象資訊轉化為計算機可以處理的數字資訊,從而讓計算機能“看得見”。這個資訊不僅僅是二維的圖片,也包括三維場景、影片序列等。基本上所有需要用到攝像頭、圖片、影片的應用場景,都離不開計算機視覺的支援。因此,這也是人工智慧領域中比較熱門的一個方向。

OpenCV-Python,計算機視覺開發利器

來自《2017年人工智慧行業發展研究報告白皮書》- IT耳朵&;amp;amp;IT桔子

而說到計算機視覺,就不能不提到

OpenCV

,它是一個歷史悠久、功能豐富、社群活躍的開源視覺開發庫。一方面,它提供了計算機視覺以及影象處理方面最常用最基礎的功能支援,是開發的必備工具;另一方面,它在新版本中緊跟潮流,加入對新的演算法、硬體的支援(v3。3 正式引入 DNN)。

OpenCV 基於 C++ 編寫,但提供了 Python、Ruby、MATLAB 等多種語言介面。這對於習慣使用 Python 開發的人工智慧從業者來說非常方便。之前的不少習題和開發案例中,我們都有用到過。今天我們再用幾個常見的例子,演示下 OpenCV-Python 的強大功能。

安裝:

OpenCV 的安裝,不同平臺不同版本會有一些差異。安裝前需要裝好

numpy

,強烈建議先安裝好

Anaconda

,然後直接透過命令安裝:

pip install opencv-python

如果你運氣好,程式碼裡執行

import cv2

沒報錯就是成功了。

但大多數時候可能不行。你可以考慮去這裡下載安裝檔案:

https://www。

lfd。uci。edu/~gohlke/pyt

honlibs/#opencv

然後透過命令從本地安裝:

pip install opencv_python‑3。4。3‑cp37‑cp37m‑win_amd64。whl

這裡下載的安裝檔案

版本

號務必要和你本機的

Python 版本

位數

相對應。

如果安裝時還有其他問題,可在網上直接搜尋報錯,通常都會有解決方案,這裡不一一贅述。

基本的影象讀寫:

我們用影象處理的經典範例

Lenna

來做測試

OpenCV-Python,計算機視覺開發利器

可自行搜尋這幅影象的來頭

import

cv2

as

cv

# 讀圖片

img

=

cv

imread

‘img/Lenna。png’

# 圖片資訊

print

‘圖片尺寸:’

img

shape

print

‘圖片資料:’

type

img

),

img

# 顯示圖片

cv

imshow

‘pic title’

img

cv

waitKey

0

# 新增文字

cv

putText

img

‘Learn Python with Crossin’

50

150

),

cv

FONT_HERSHEY_SIMPLEX

1

255

255

255

),

4

# 儲存圖片

cv

imwrite

‘img/Lenna_new。png’

img

OpenCV-Python,計算機視覺開發利器

OpenCV-Python,計算機視覺開發利器

OpenCV-Python 中的影象資料使用了

numpy 庫的 ndarray 型別

進行管理,便於進行各種數值計算和轉換。

常見的影象處理:

import

numpy

as

np

# 灰度圖

img_gray

=

cv

cvtColor

img

cv

COLOR_BGR2GRAY

cv

imwrite

‘img/Lenna_gray。png’

img_gray

# 二值化

_

img_bin

=

cv

threshold

img_gray

127

255

cv

THRESH_BINARY

cv

imwrite

‘img/Lenna_bin。png’

img_bin

# 平滑

img_blur

=

cv

blur

img

5

5

))

cv

imwrite

‘img/Lenna_blur。png’

img_blur

# 邊緣提取

_

contours

_

=

cv

findContours

img_bin

cv

RETR_TREE

cv

CHAIN_APPROX_SIMPLE

img_cont

=

np

zeros

img_bin

shape

np

uint8

cv

drawContours

img_cont

contours

-

1

255

3

cv

imwrite

‘img/Lenna_cont。png’

img_cont

OpenCV-Python,計算機視覺開發利器

這幾種都屬於

數字影象處理

的常用方法。OpenCV-Python 基本都封裝好的介面,只需一兩行程式碼就能完成,在實際專案開發中非常方便。

我們程式設計教室之前的“

每週一坑

”欄目裡,和影象相關的題目基本都可以用 OpenCV-Python 來解決。

對這方面知識感興趣的,可以找本數字影象處理的相關教材系統地看一遍,瞭解數字影象處理的基礎。

除了基礎功能,OpenCV 在程式碼附帶的

Samples

裡還提供了一些經典開發案例:

人臉檢測

https://

github。com/opencv/openc

v/blob/master/samples/python/facedetect。py

使用方法

python facedetect。py

核心程式碼

cascade

=

cv

CascadeClassifier

“haarcascade_frontalface_alt。xml”

rects

=

cascade

detectMultiScale

img

scaleFactor

=

1。3

minNeighbors

=

4

minSize

=

30

30

),

flags

=

cv

CASCADE_SCALE_IMAGE

OpenCV-Python,計算機視覺開發利器

此功能基於

Haar 分類器

實現,專案中附帶有訓練好的分類器檔案。此外,你還可以使用 OpenCV 訓練針對其他目標特徵的分類器。

我們之前的開發案例 《Python 送你一頂聖誕帽》 就使用了 OpenCV-Python 的人臉識別程式碼。獲取程式碼請在公眾號(Crossin的程式設計教室)裡回覆關鍵字

聖誕帽

姿態識別

https://

github。com/opencv/openc

v/blob/master/samples/dnn/openpose。py

使用方法

python openpose。py ——model pose。caffemodel ——proto pose。prototxt ——dataset MPI

核心程式碼

net

=

cv

dnn

readNetFromCaffe

args

proto

args

model

inp

=

cv

dnn

blobFromImage

frame

1。0

/

255

inWidth

inHeight

),

0

0

0

),

swapRB

=

False

crop

=

False

net

setInput

inp

out

=

net

forward

()

OpenCV-Python,計算機視覺開發利器

詳情參見文章: 用 Python 實現抖音尬舞機

獲取程式碼請在公眾號(Crossin的程式設計教室)裡回覆關鍵字

姿態

風格遷移

https://

github。com/opencv/openc

v/blob/master/samples/dnn/fast_neural_style。py

使用方法

python fast_neural_style。py ——model starry_night。t7

核心程式碼

net

=

cv

dnn

readNetFromTorch

args

model

net

setPreferableBackend

cv

dnn

DNN_BACKEND_OPENCV

);

inp

=

cv

dnn

blobFromImage

frame

1。0

inWidth

inHeight

),

103。939

116。779

123。68

),

swapRB

=

False

crop

=

False

net

setInput

inp

out

=

net

forward

()

OpenCV-Python,計算機視覺開發利器

詳情參見文章: Python+OpenCV 十幾行程式碼模仿世界名畫

獲取程式碼請在公眾號(Crossin的程式設計教室)裡回覆關鍵字

名畫

以上便是 OpenCV-Python 的一些簡單應用。OpenCV 官方 Samples 程式碼裡還有很多有趣的例子(地址:

https://

github。com/opencv/openc

v

)更強大的功能也有待你在開發中逐步體會。

希望這篇管中窺豹的文章可以讓各位對 OpenCV 和計算機視覺有一個初步的瞭解和直觀的認識,進而共同參與到人工智慧這場技術浪潮中來。

獲取更多學習資源和程式碼例項,請在公眾號(Crossin的程式設計教室)裡回覆關鍵字

專案

════

其他文章及回答:

如何自學Python|新手引導|精選Python問答|Python單詞表|人工智慧|嘻哈|爬蟲|我用Python|高考|requests|AI平臺

歡迎搜尋及關注:

Crossin的程式設計教室