OpenCV 是一個開源的計算機視覺庫,全稱Open Source Computer Vision,提供了許多用於圖像處理、計算機視覺和機器學習的函數和工具。由Intel發起並開發,所以如果你是用MAC,那可以準備放棄了,很多東西都不相容。
OpenCV 的功能範圍包括圖像處理、特徵檢測和描述、物體識別、人臉識別、視頻分析等。它被廣泛應用於各種領域,如機器人技術、自動駕駛、監控系統、醫學影像等等等。
安裝OpenCV
首先,使用cmd,按下windows圖示,搜尋cmd
點開按enter會出現一個小黑框,在框框中輸入下面的程式
pip install opencv-python
pip install opencv_contrib_python
如果像我一樣,遇到building wheel…的錯誤,請在先前輸入
pip install --upgrade pip setuptools wheel
或是換個版本看看,通常這種奇怪的方法都會湊效
進行測試
import cv2
# 加載圖片
img = cv2.imread('example.jpg')
# 顯示圖片
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
將你同檔案夾下的圖片名稱換入example.jpg 就可以看到圖片彈出視窗了
總之,你已經成功下載opencv了,以後如果要下載類似的包,不一定要翻遍網路上所有教學,以OpenCV為例:
- 安裝 OpenCV:使用包管理器或下載源代碼安裝 OpenCV。(pip install)
- 建立測試程式:使用熟悉的語言(如 Python)建立簡單的程式來確保 OpenCV 正確安裝。
- 測試基本功能:確保你的測試程式可以加載和顯示圖像。
- 擴展測試:嘗試其他 OpenCV 功能,如圖像處理和特徵檢測。
- 解決問題:遇到問題時,參考官方文檔或在線社區尋求幫助。
OpenCV使用
OpenCV 提供了許多常用的功能和函式,以下是其中一些常見的:
- imread():用於讀取圖像文件的函式。它接受文件路徑作為輸入,並返回一個代表圖像的數組。
- imshow():用於顯示圖像的函式。它接受一個窗口名稱和一個圖像數組作為輸入,並在一個窗口中顯示該圖像。
- imwrite():用於將圖像寫入文件的函式。它接受文件路徑和圖像數組作為輸入,並將該圖像保存到指定的文件中。
- cvtColor():用於在不同的色彩空間之間進行轉換的函式。例如,將 RGB 圖像轉換為灰度圖像。
- resize():用於調整圖像大小的函式。它接受一個圖像數組和目標大小作為輸入,並返回一個調整大小後的圖像。
- flip():用於翻轉圖像的函式。它接受一個圖像數組和翻轉方式作為輸入,並返回一個翻轉後的圖像。
這些是 OpenCV 中一些常用的函式和功能,但還有很多其他功能可用於圖像處理、計算機視覺和機器學習任務。
下面我們會用程式碼實做並一一介紹它們的功能
imread()、imshow()
import cv2
# 加載圖像,使用imread()函式,指定圖像文件的路徑作為參數
img = cv2.imread('example.jpg')
# 確保成功加載圖像,如果圖像為None,則輸出錯誤消息
if img is None:
print('無法讀取圖像')
else:
# 顯示圖像,使用imshow()函式,指定窗口名稱和圖像數組作為參數
cv2.imshow('Image', img)
# 等待用戶按下任意鍵,使用waitKey()函式,指定等待時間(毫秒),0表示無限等待
cv2.waitKey(0)
# 關閉所有窗口,使用destroyAllWindows()函式
cv2.destroyAllWindows()
cvtColor()、imwrite()
import cv2
# 加載圖像,使用imread()函式,指定圖像文件的路徑作為參數
img = cv2.imread('example.jpg')
# 確保成功加載圖像,如果圖像為None,則輸出錯誤消息
if img is None:
print('無法讀取圖像')
else:
# 將彩色圖像轉換為灰度圖像,使用cvtColor()函式,指定轉換方式
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 顯示灰度圖像,使用imshow()函式,指定窗口名稱和圖像數組作為參數
cv2.imshow('Gray Image', gray_img)
# 將灰度圖像保存為新的文件,使用imwrite()函式,指定文件路徑和圖像數組作為參數
cv2.imwrite('gray_example.jpg', gray_img)
# 等待用戶按下任意鍵,使用waitKey()函式,指定等待時間(毫秒),0表示無限等待
cv2.waitKey(0)
# 關閉所有窗口,使用destroyAllWindows()函式
cv2.destroyAllWindows()
resize()、flip()
import cv2
# 加載圖像,使用imread()函式,指定圖像文件的路徑作為參數
img = cv2.imread('example.jpg')
# 確保成功加載圖像,如果圖像為None,則輸出錯誤消息
if img is None:
print('無法讀取圖像')
else:
# 調整圖像大小,使用resize()函式,指定目標大小
resized_img = cv2.resize(img, (img.shape[1]//2, img.shape[0]//2))
# 翻轉圖像,使用flip()函式,指定翻轉方式
flipped_img = cv2.flip(resized_img, 1)
# 顯示縮小和翻轉後的圖像,使用imshow()函式,指定窗口名稱和圖像數組作為參數
cv2.imshow('Resized and Flipped Image', flipped_img)
# 等待用戶按下任意鍵,使用waitKey()函式,指定等待時間(毫秒),0表示無限等待
cv2.waitKey(0)
# 關閉所有窗口,使用destroyAllWindows()函式
cv2.destroyAllWindows()
實時影片
如果你想像我的一個專案一樣隨時偵測鏡頭畫面 專案: [模型分享] AI自學 4-Object_and_Pose_detection
那麼可以對下面的程式進行修改,它可以將你的鏡頭打開並實時每禎偵測
import cv2
# 打開相機,使用VideoCapture函式,指定相機索引號(通常是0)作為參數
cap = cv2.VideoCapture(0)
# 確保成功打開相機,如果失敗,則輸出錯誤消息
if not cap.isOpened():
print('無法打開相機')
else:
while True:
# 從相機中讀取一幀影像,使用read()函式
ret, frame = cap.read()
# 確保成功讀取影像,如果失敗,則退出迴圈
if not ret:
break
# 顯示影像,使用imshow()函式,指定窗口名稱和影像數組作為參數
cv2.imshow('Camera', frame)
# 等待10毫秒,使用waitKey()函式,指定等待時間(毫秒),如果按下 'q' 鍵則退出迴圈
if cv2.waitKey(10) & 0xFF == ord('q'):
break
# 釋放相機,使用release()函式
cap.release()
# 關閉所有窗口,使用destroyAllWindows()函式
cv2.destroyAllWindows()