一、OpenCV介紹
OpenCV是一款跨平台的計算機視覺庫,它提供了各種各樣的函數,用於圖像、視頻處理和機器學習。OpenCV最初是由英特爾公司開發的,以C++語言編寫而成,但現已得到支持多種編程語言(如Python、Java等)的擴展。
OpenCV生態系統從2.x版本開始就已經被廣泛應用。如今,它常用於人臉檢測、圖像分割、圖像跟蹤等方面,同時也是許多研究人員和工程師的首選。
下面給出一個簡單的例子,展示如何使用OpenCV讀取並顯示圖像。這是OpenCV的入門的第一步——載入圖像。
import cv2 as cv img = cv.imread('example.jpg', 1) cv.imshow('image', img) cv.waitKey(0) cv.destroyAllWindows()
代碼中,cv2.imread函數可以讀取一張圖像,並以numpy數組的形式存儲。其中,1表示讀取為彩色圖像,0表示讀取為灰度圖像;’example.jpg’表示要讀取的圖像路徑。
cv.imshow函數可用於顯示圖像,第一個參數指定窗口名字,第二個參數指定要顯示的圖像。cv.waitKey函數則等待特定時間(以毫秒計)來查看是否有任何鍵盤事件,如果按下任何按鍵,則返回鍵的ASCII值,否則返回-1。cv.destroyAllWindows函數清除所有高GUI窗口。
二、基本圖像處理
OpenCV提供的基礎函數使得圖像處理變得更加簡單。下面我們看看一些最常用的圖像處理函數。
1. 圖像調整
import cv2 as cv img = cv.imread('example.jpg', 1) # 縮小一倍 img_resized = cv.resize(img,(int(img.shape[1]/2), int(img.shape[0]/2))) cv.imshow('resized', img_resized) # 水平翻轉 img_flipped = cv.flip(img, 1) cv.imshow('flipped', img_flipped) # 調整亮度 M = np.ones(img.shape, dtype='uint8') * 75 img_bright = cv.add(img, M) cv.imshow('bright', img_bright) cv.waitKey(0) cv.destroyAllWindows()
代碼中,cv.resize函數可以縮小或放大圖像,第一個參數指定要改變的圖像,第二個參數為新圖片的width和height。cv.flip函數可以水平、垂直或水平垂直翻轉圖片,第一個參數是要翻轉的圖像,第二個參數是指定翻轉類型。
圖像的對比度和亮度可以用add函數來調整,M為輸入圖像,表示要強制增加的每個像素的值。OpenCV允許使用numpy來操作每個像素。
2. 圖像濾波
import cv2 as cv import numpy as np img = cv.imread('example.jpg', 1) # 高斯濾波 img_blur = cv.GaussianBlur(img, (5,5), 0) cv.imshow('blur', img_blur) # 中值濾波 img_median = cv.medianBlur(img, 5) cv.imshow('median', img_median) # 邊緣檢測 img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) img_edges = cv.Canny(img_gray, 50, 150) cv.imshow('edges', img_edges) cv.waitKey(0) cv.destroyAllWindows()
代碼中,cv.GaussianBlur函數實現高斯濾波,第一個參數為輸入圖像,第二個參數是一個元組ksize,表示內核大小。第三個參數是標準差,為0時表示自動計算。cv.medianBlur函數實現中值濾波,第一個參數為輸入圖像,第二個參數為內核大小。cv.Canny函數用於自動的邊緣檢測策略,第一個參數是輸入圖像,後兩個參數的閾值大小和比率。
三、實際應用
下面是一個實際應用的例子:簡單的人臉檢測。
首先需要下載並導入計算機視覺庫Dlib和OpenCV。
!pip install dlib
以下是人臉檢測的代碼示例
import cv2 import dlib detector = dlib.get_frontal_face_detector() # 載入圖片 img = cv2.imread('example.jpg', 1) img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 人臉檢測 faces = detector(img_rgb) # 框出人臉 for face in faces: x1, y1 = face.left(), face.top() x2, y2 = face.right(), face.bottom() cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 10) # 顯示結果 cv2.imshow('result', img) cv2.waitKey(0) cv2.destroyAllWindows()
代碼中,首先使用dlib.get_frontal_face_detector()函數創建一個默認的人臉檢測器。然後載入一張圖片,並將其轉換為RGB格式。接著使用detector函數檢測人臉,結果將存儲在一個list中。最後,使用cv2.rectangle函數將人臉框起來。
總結
本文通過介紹OpenCV基本功能以及實際應用,對其功能進行了詳細的闡述,希望可以幫助讀者更好地了解和使用OpenCV。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/284662.html