用 OpenCV 開啟電腦視覺的世界:基礎介紹與應用(使用Python)

更新於 發佈於 閱讀時間約 12 分鐘

所謂電腦視覺

電腦視覺算不算是一種AI?答案是對,電腦視覺就是AI的其中一項應用。我們可以把「電腦視覺」想像成「讓電腦學會用眼睛看懂世界」。就像人類用眼睛看東西並理解這些東西的樣子,電腦視覺是讓電腦學會「看」影像或影片,並從中「理解」裡面有哪些內容。然而,讓電腦跟人腦一樣得理解圖片內容,就是其最大的困難點。

以底下這張照片中,電腦能夠讀懂圖片中的物件並準確分類。

raw-image

舉個例子,當一個人看到以下這兩張圖片時,會很直覺的認為左邊的是玩具車,而右邊的是普通的汽車,原因就在於他的大小以及跟周邊物體的對比。電腦視覺所要模擬的,就是這種思考方式,因此能準確的判斷圖片中一個物體。

玩具車 vs 真實汽車

玩具車 vs 真實汽車

雖然聽起來挺容易理解電腦視覺在做的事,但其中也與深度學習有著強烈的關聯,有相當多要研究的地方,若往下研究會發現這是一個很深的坑啊~,所以隨著現在人工智慧、深度學習等技術的興起,影像辨識的強度、準確度以及速度都大幅提升,應用的領域也越來越廣。雖然這是一個聽起來很困難的事,但是網路上提供了五花八門的學習影像辨識函式庫,可以利用引用別人已經寫好的函式來做專案,這樣就可以大大降低入門的門檻,這次就來介紹其中最著名的函式庫OpenCV。


什麼是OpenCV?

在要開始認識OpenCV之前,要先知道CV指的是電腦視覺(Computer Vision),因此他的全名便是Open Source Computer Vision Library,開源的電腦視覺,由 Intel 發起並開源,它在學術研究和商業應用中都非常流行。OpenCV 支援多種程式語言,包括 Python、C++、Java 等,並且可以在多個作業系統上運行,如 Windows、Linux 和 macOS。

OpenCV的功能十分強大,提供了基本的影像操作(濾波、邊緣檢測、直方圖均衡化)、物件檢測、影像分割、特徵提取,甚至內建了一些基本的機器學習演算法,例如支援向量機(SVM)、K-means 分群等,以及深度學習模型加載,可以直接使用訓練好的模型進行推理。

這些都還需要很多時間的學習,先看看就好~ 不過有興趣的話也歡迎繼續閱讀下去,下一段中會介紹他的基礎的操作方式


OpenCV的運作方式

OpenCV的使用方式可以大致分為三個步驟

  1. 讀取影像或影片(讓電腦「看到」東西)
    首先,OpenCV 需要從某個來源(例如相機或影像檔案)「看到」影像。電腦本身不是真的有眼睛,它看到的是一堆數字,但這些數字代表影像中的顏色和亮度。OpenCV 將影像或影片讀入程式,這樣影像內容就能進一步進行處理。
  2. 處理影像(讓電腦「理解」影像)
    接著,OpenCV 會對影像進行一些處理,這一步就是讓電腦「理解」影像內容。例如:
    • 轉換顏色:可以把彩色影像轉成黑白,這樣可以幫助簡化資料,讓處理速度變快。
    • 去除雜訊:影像可能有雜訊或模糊點,OpenCV 可以用一些技術把影像弄得更清晰。
    • 找邊緣:電腦可以找出物體的輪廓,就像我們在畫畫時會先畫出物體的外形。這對於辨識物體很有幫助。
    • 物體辨識:利用一些訓練好的資料庫,OpenCV 可以「判斷」影像中有哪些東西,比如人臉、車輛、文字等。
  3. 顯示或輸出結果(讓電腦“展示”結果)
    處理完影像後,OpenCV 可以把結果「顯示」出來。這可能是顯示一張標註過的影像,或者儲存成新的檔案。比如,我們可以把檢測到的臉部用方框框起來,然後顯示在畫面上

自己寫寫看簡單的影像辨識!

我們將會使用OpenCV裡的 Haar Cascades 人臉辨識分類器

首先要先在終端機打下以下指令,下載所需的opencv函式庫

pip install opencv-python

接著就可以開始寫程式了~

import cv2 
# Step 1 img = cv2.imread('Nicolas.jpeg')
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

Step 1.

import cv2 引入opencv後便可以開始撰寫其他內容。

img = cv2.imread(圖片名稱) 這裡是要將一張自己所下載好的圖片給cv2讀取(提醒:圖片中要有人的「正臉」之後才能看出效果)

💡補充:
cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') :
cv2.CascadeClassifier: 這是OpenCV中用來做物體檢測的分類器。它可以用來檢測像是人臉、眼睛等特徵。
cv2.data.haarcascades: 這是OpenCV中存放預訓練的Haar分類器模型的位置。Haar特徵分類器是一種常用的物體檢測方法。
'haarcascade_frontalface_default.xml':這是Haar分類器模型的名稱,它專門用來檢測正面人臉。這個XML檔案包含了識別人臉所需的特徵數據。

定義一個名為face_cascade的變數,用來當成是cv2.CascadeClassifier偵測正面人臉的工具。

face_casade = .... 

#接著上面的程式碼繼續寫

#Step 2.
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.1, 4)

for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

Step 2.

我們要先透過cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)把影像轉換成灰階,並用gray變數存起來。

原始圖片 vs 灰階圖片

原始圖片 vs 灰階圖片

之所以在做影像辨識時要將圖片轉成灰階,是由於將圖片轉換成灰階可以簡化影像處理的過程,提高運算效率,並在某些情況下提高辨識的準確度。舉個例子,在人臉辨識中,我們通常會將彩色人臉圖像轉換為灰階圖,因為人臉的主要特徵,如眼睛、鼻子、嘴巴等,在灰階圖中仍然清晰可見。而彩色資訊,如膚色等,對於人臉辨識來說並不重要,反而可能引入不必要的雜訊。

💡💡補充:
face_cascade.detectMultiScale(灰階圖片, 縮放比例, 檢測次數)

1.1 這是 scaleFactor 參數,用來設定每次圖像尺寸縮放的比例(這個參數是用來處理圖片中不同大小的人臉):
值越接近 1,檢測會越精確,但運算時間會增加
。例如 1.1 表示每次將圖片縮小 10%
。如果設為 1.2 則每次縮小 20%

4 這是 minNeighbors 參數,表示每個候選區域至少要檢測到幾次才算是真的人臉:
。值越大,誤判率越低,但可能會漏掉一些人臉
。值越小,可以檢測到更多人臉,但可能會有更多誤判
。一般建議值在 3-6 之間

我們可以透過這行簡單的程式,套用「正臉」臉部辨識的函式,faces = face_cascade.detectMultiScale(gray, 1.1, 4),而face所會得到的資料是一個多維矩陣的格式,每個矩陣中包含(x, y, w, h),分別代表每個所判定到的人臉的在圖片中的位子以及大小。


有了資料之後,便可以開始把辨識到的人臉框起來(將資料視覺化),可以透過一個for迴圈讀取faces中的每個矩陣,並用其中的(x, y, w, h)資料透過cv2.rectengle函式在圖片中畫出一個矩形的框框,
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)


for (x, y, w, h) in faces: 
... #接著上面的程式碼繼續寫

#Step 3.
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()


Step 3.

💡 補充:cv2.imshow(窗口名稱, 圖片)

最後,我們只需要透過cv2.imshow()指令上畫面顯示出來即可。

恭喜你完成了第一個OpenCV的程式!這就是一個最簡單使用OpenCV中內建的函式的其中一種方式,寫完後也可以嘗試更改看看face_cascade.detectMultiScale(gray, 1.1, 4) 中的參數,或是更換成其他圖片,並看看差異在哪裡~


完整程式碼

import cv2 

# 讀取圖片
img = cv2.imread('Nicolas.jpeg')

cv2.imshow('orig img',img)

# 使用「正臉」的人臉辨識系統
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

#將圖片轉換成灰階
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#讀取圖片中的所有人臉
faces = face_cascade.detectMultiScale(gray, 1.1, 4)

#在畫面中畫出框框
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

# 顯示最後結果(圖片)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()


結論

OpenCV 是一個厲害且普遍的開源電腦視覺函式庫,特別適合想要入門影像處理的程式開發者。它最常用於 Python 程式語言,提供了豐富的工具和函式來處理圖片與視訊。初學者可以從基本的圖片操作開始,例如讀取、顯示和儲存圖片,這些都只需要幾行簡單的程式碼就能完成。進階一點的功能包括調整圖片大小、裁剪、旋轉、模糊化等基本影像處理,這些都是建立更複雜應用的基礎,在往下研究的話,也能透過tensorflow等套件自己訓練模型。若對於此OpenCV影像辨識的領域有興趣,上網自學也是一個很好的方式,由於它是很熱門的套件,所以網路上的資源是相當多,相信你可以玩出一些新花樣!。

進階思考

除了OpenCV這種影像辨識的套件還有其他類似的套件嗎?有的,而且也不少,以下我整理了一不同難度的套件,之後有感興趣的話也歡迎研究看看!

  • 入門學習:
    • OpenCV + Pillow:基礎影像處理
    • TensorFlow/Keras:深度學習入門
  • 專案開發:
    • 網頁應用:MediaPipe
    • 行動應用:TensorFlow Lite
    • 研究專案:PyTorch
    • 即時處理:Dlib
  • 特定應用:
    • 人臉辨識:Dlib + OpenCV
    • 物件偵測:Detectron2
    • 姿態估計:MediaPipe
    • 圖片處理:Pillow + Scikit-image
留言
avatar-img
留言分享你的想法!
avatar-img
穎.的沙龍
4會員
4內容數
這裡會分享一些各式各樣有關程式的內容~
穎.的沙龍的其他內容
2024/12/10
你是不是也好奇:一個漂亮又好用的網站是怎麼做出來的,又或是他們背後的原理是什麼?聽過「前端」、「後端」和「資料庫」這些詞,但又不知道它們是什麼意思?別擔心!在這篇文章中,我會用簡單的方式帶你認識它們! 什麼是前端?(Frontend) 「前端」就是你在瀏覽器上看到和互動的部分,比如按鈕、圖片
Thumbnail
2024/12/10
你是不是也好奇:一個漂亮又好用的網站是怎麼做出來的,又或是他們背後的原理是什麼?聽過「前端」、「後端」和「資料庫」這些詞,但又不知道它們是什麼意思?別擔心!在這篇文章中,我會用簡單的方式帶你認識它們! 什麼是前端?(Frontend) 「前端」就是你在瀏覽器上看到和互動的部分,比如按鈕、圖片
Thumbnail
2024/12/01
最近AI工具的發展以及盛行 隨著近代科技的飛速發展,從以前不時會出錯、不太聰明的人工智慧,演變成了現在常在各式各樣3C產品或是網頁平台中看見AI的輔助功能,並且生成的內容精確度及準確度高得不可思議。 本篇文章將會帶你了解這些AI工具對教育的影響!
Thumbnail
2024/12/01
最近AI工具的發展以及盛行 隨著近代科技的飛速發展,從以前不時會出錯、不太聰明的人工智慧,演變成了現在常在各式各樣3C產品或是網頁平台中看見AI的輔助功能,並且生成的內容精確度及準確度高得不可思議。 本篇文章將會帶你了解這些AI工具對教育的影響!
Thumbnail
2024/11/17
Pygame是什麼? 講到編寫遊戲你會想到什麼程式語言呢? 大多數人可能第一時間會想到Unity之類的程式,但其實Python也能寫遊戲喔。其中Pygame就是為了使用Python寫遊戲所開發的套件,它是一個輕量的遊戲套件,能夠完成大部分遊戲所需要的功能,包括音樂管理、圖形處理及事件處理等等。
Thumbnail
2024/11/17
Pygame是什麼? 講到編寫遊戲你會想到什麼程式語言呢? 大多數人可能第一時間會想到Unity之類的程式,但其實Python也能寫遊戲喔。其中Pygame就是為了使用Python寫遊戲所開發的套件,它是一個輕量的遊戲套件,能夠完成大部分遊戲所需要的功能,包括音樂管理、圖形處理及事件處理等等。
Thumbnail
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
TensorFlow是由 Google 開發的一個強大開源機器學習框架,它賦予電腦像人類一樣學習和思考的能力。本文介紹了 TensorFlow 的核心功能、概念及其在圖像識別、自然語言處理等領域的應用,並提供學習資源與社群資訊。無論是初學者還是專業開發者,都能充分發揮 AI 的潛力。
Thumbnail
TensorFlow是由 Google 開發的一個強大開源機器學習框架,它賦予電腦像人類一樣學習和思考的能力。本文介紹了 TensorFlow 的核心功能、概念及其在圖像識別、自然語言處理等領域的應用,並提供學習資源與社群資訊。無論是初學者還是專業開發者,都能充分發揮 AI 的潛力。
Thumbnail
人工智慧是什麼? 人工智慧(Artificial Intelligence, AI) 簡單來說,就是讓機器模仿人類的思考、學習和決策的能力。它就像是一個聰明的電腦程序,可以執行許多原本需要人類智慧才能完成的工作,例如: 語音辨識: 讓電腦聽懂人類的語言,像是 Siri、Google As
Thumbnail
人工智慧是什麼? 人工智慧(Artificial Intelligence, AI) 簡單來說,就是讓機器模仿人類的思考、學習和決策的能力。它就像是一個聰明的電腦程序,可以執行許多原本需要人類智慧才能完成的工作,例如: 語音辨識: 讓電腦聽懂人類的語言,像是 Siri、Google As
Thumbnail
AI的世界充滿了創新和潛力,涵蓋了許多領域,包括但不限於機器學習,自然語言處理、電腦視覺和機器人技術。AI對人類社會的影響是複雜而多層面的,既帶來了巨大的機遇,也提出了新的挑戰。社會需要在技術發展和倫理規範之間找到平衡,確保AI技術的應用能夠真正造福人類。
Thumbnail
AI的世界充滿了創新和潛力,涵蓋了許多領域,包括但不限於機器學習,自然語言處理、電腦視覺和機器人技術。AI對人類社會的影響是複雜而多層面的,既帶來了巨大的機遇,也提出了新的挑戰。社會需要在技術發展和倫理規範之間找到平衡,確保AI技術的應用能夠真正造福人類。
Thumbnail
AI,全稱人工智慧,是指讓電腦或機器具備類似人類的智慧和能力的科學和技術。AI 可以幫助我們解決各種問題,提高效率,創造價值,甚至改變世界。但是,你知道 AI 是如何運作的嗎?你知道 AI 的歷史和未來嗎?你知道 AI 的優點和挑戰嗎?在這篇文章中,我將帶你一起認識 AI 的基本概念和發展。
Thumbnail
AI,全稱人工智慧,是指讓電腦或機器具備類似人類的智慧和能力的科學和技術。AI 可以幫助我們解決各種問題,提高效率,創造價值,甚至改變世界。但是,你知道 AI 是如何運作的嗎?你知道 AI 的歷史和未來嗎?你知道 AI 的優點和挑戰嗎?在這篇文章中,我將帶你一起認識 AI 的基本概念和發展。
Thumbnail
未來,人工智慧(AI)預計將在各行各業帶來迅速的變革,重新塑造生活方式。文章探討了AI的定義,強調其模擬人類思維和行為的能力。AI已廣泛應用於手機、電腦、醫療、商業、教育和法律等領域,並影響生活的方方面面。
Thumbnail
未來,人工智慧(AI)預計將在各行各業帶來迅速的變革,重新塑造生活方式。文章探討了AI的定義,強調其模擬人類思維和行為的能力。AI已廣泛應用於手機、電腦、醫療、商業、教育和法律等領域,並影響生活的方方面面。
Thumbnail
自ChatGPT 出現以後,中國的人工智能領域一直是受到關注,但是被不看好的一個項目,這主要是因為敏感詞限制與語言模型的複雜性,訓練經費等等的原因。 最近百度推出的文言一心也常常被說是完全照搬和受到限制的。
Thumbnail
自ChatGPT 出現以後,中國的人工智能領域一直是受到關注,但是被不看好的一個項目,這主要是因為敏感詞限制與語言模型的複雜性,訓練經費等等的原因。 最近百度推出的文言一心也常常被說是完全照搬和受到限制的。
Thumbnail
整个系列课程内容虽然为自己所写,但是参考了bothub 创始人徐文浩的课程《AI 大模型之美》 人工智能是计算机科学领域中最具前瞻性和影响力的技术之一。它是一种智慧型算法,能够模拟人类的思维过程,处理大量的数据和信息,从而发现隐藏在其中的规律和趋势。人工智能的应用范围非常广泛,包括语音识别、图像识
Thumbnail
整个系列课程内容虽然为自己所写,但是参考了bothub 创始人徐文浩的课程《AI 大模型之美》 人工智能是计算机科学领域中最具前瞻性和影响力的技术之一。它是一种智慧型算法,能够模拟人类的思维过程,处理大量的数据和信息,从而发现隐藏在其中的规律和趋势。人工智能的应用范围非常广泛,包括语音识别、图像识
Thumbnail
面對鋪天蓋地的AI工具席捲而來? 你是感到躍躍欲試還是焦慮不安呢? 讓我們一起認識現有的AI學習資源,讓我們深入淺出來瞭解一下AI世界吧!
Thumbnail
面對鋪天蓋地的AI工具席捲而來? 你是感到躍躍欲試還是焦慮不安呢? 讓我們一起認識現有的AI學習資源,讓我們深入淺出來瞭解一下AI世界吧!
Thumbnail
本文將從心理學的角度探討AI對人類學習的啟發,希望能為大家提供一些新的思考方向。
Thumbnail
本文將從心理學的角度探討AI對人類學習的啟發,希望能為大家提供一些新的思考方向。
Thumbnail
人工智能是一種對計算機系統對人類智能過程的模擬,而人工智能應用(Artificial intelligence application)包括專家系統、自然語言處理、語音識別和機器視覺。
Thumbnail
人工智能是一種對計算機系統對人類智能過程的模擬,而人工智能應用(Artificial intelligence application)包括專家系統、自然語言處理、語音識別和機器視覺。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News