Python第三方庫之OpenCV庫的實(shí)用指南
前言
OpenCV(Open Source Computer Vision Library)作為一個(gè)強(qiáng)大的計(jì)算機(jī)視覺庫,提供了豐富的圖像處理和計(jì)算機(jī)視覺功能,尤其在圖像識(shí)別、對(duì)象檢測(cè)、視頻分析等領(lǐng)域有著廣泛的應(yīng)用。本文將帶領(lǐng)讀者使用Python編程語言,通過簡(jiǎn)單的代碼示例,初步掌握OpenCV的圖像處理技術(shù)。
安裝OpenCV
首先,我們需要在Python環(huán)境中安裝OpenCV庫,可以通過以下命令進(jìn)行安裝:
pip install opencv-python
安裝完成后,我們可以導(dǎo)入OpenCV庫,并加載一張圖像來開始我們的操作。
讀取圖像
讀取圖像是圖像處理的第一步,OpenCV通過cv2.imread()方法可以輕松完成。代碼如下:
import cv2
# 讀取圖像
image = cv2.imread('path_to_image.jpg')
# 顯示圖像
cv2.imshow('Image', image)
cv2.waitKey(0) # 按任意鍵關(guān)閉窗口
cv2.destroyAllWindows()
在這段代碼中:
cv2.imread()方法用于讀取圖像,參數(shù)為圖像文件路徑。圖像文件要確認(rèn)存在,否則會(huì)返回None。cv2.imshow()可以將圖像顯示在窗口中,參數(shù)分別是窗口名稱和圖像數(shù)據(jù)。cv2.waitKey()用于等待鍵盤事件,參數(shù)0表示無限等待。會(huì)等待用戶按下任意鍵,然后關(guān)閉顯示窗口。cv2.destroyAllWindows()用于關(guān)閉所有窗口。
圖像基本操作
接下來,我們可以對(duì)讀取的圖像進(jìn)行一些基本的操作,如獲取圖像信息、裁剪、縮放等。
獲取圖像信息
# 獲取圖像的高度、寬度及通道數(shù)
height, width, channels = image.shape
print(f"Height: {height}, Width: {width}, Channels: {channels}")
裁剪圖像
# 裁剪圖像
cropped_image = image[50:200, 100:300] # 裁剪區(qū)域?yàn)閥軸從50到200,x軸從100到300
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
圖像縮放
# 縮放圖像
resized_image = cv2.resize(image, (300, 200)) # 將圖像縮放至300x200
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
圖像轉(zhuǎn)換為灰度圖
有時(shí)候,我們只需要處理圖像的灰度部分,可以通過cv2.cvtColor()函數(shù)將彩色 圖像轉(zhuǎn)換為灰度圖:
# 轉(zhuǎn)換為灰度圖
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
以下是 cv2.COLOR_* 常見的顏色空間轉(zhuǎn)換類型及其解釋:
- cv2.COLOR_BGR2GRAY:將彩色 圖像從 BGR 模式轉(zhuǎn)換為灰度圖像。
- cv2.COLOR_BGR2RGB:將圖像從 BGR 模式轉(zhuǎn)換為 RGB 模式。(OpenCV 默認(rèn)使用 BGR 排列,而許多其他庫(如 Matplotlib)使用 RGB 排列,因此需要將 BGR 轉(zhuǎn)為 RGB。)
- cv2.COLOR_BGR2HSV:將圖像從 BGR 模式轉(zhuǎn)換為 HSV 模式。(HSV 模式分別表示色調(diào)(Hue)、飽和度(Saturation)、亮度(Value),該模式更接近人類對(duì)顏色的感知,常用于色彩過濾和圖像分割。)
- cv2.COLOR_BGR2LAB:將圖像從 BGR 模式轉(zhuǎn)換為 LAB 模式。(LAB 顏色空間分為亮度(L)、綠色到紅色(A)、藍(lán)色到黃色(B)。該模式常用于增強(qiáng)圖像對(duì)比度。)
更多不在說明,可查詢官方文檔
圖像模糊處理
模糊處理常用于圖像預(yù)處理,OpenCV提供了多種模糊算法,如高斯模糊、中值模糊等。以下是使用高斯模糊的代碼示例:
# 高斯模糊處理
blurred_image = cv2.GaussianBlur(image, (15, 15), 0) # 核大小為15x15
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
邊緣檢測(cè)
Canny 邊緣檢測(cè)是一種常見的圖像處理技術(shù),用于找出圖像中的“邊緣”,也就是物體之間的輪廓或變化最明顯的部分。它被廣泛應(yīng)用于圖像識(shí)別、對(duì)象檢測(cè)等領(lǐng)域。代碼如下:
# 邊緣檢測(cè)
edges = cv2.Canny(image, 100, 200)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
在這段代碼中,cv2.Canny()的兩個(gè)參數(shù)分別為低閾值和高閾值,控制邊緣檢測(cè)的敏感度。
cv2.Canny(image, 100, 200):使用Canny邊緣檢測(cè)。這里的 100 是低閾值,200 是高閾值,決定了檢測(cè)的靈敏度。
圖像翻轉(zhuǎn)
圖像翻轉(zhuǎn)是將圖像沿水平或垂直方向進(jìn)行翻轉(zhuǎn),常見的有水平翻轉(zhuǎn)和垂直翻轉(zhuǎn)兩種。在 OpenCV 中,可以使用 cv2.flip() 函數(shù)來實(shí)現(xiàn)圖像的翻轉(zhuǎn)。
dst = cv2.flip(src, flipCode)
第一個(gè)參數(shù)表示要進(jìn)行翻轉(zhuǎn)的輸入圖像。第二個(gè)參數(shù)表示翻轉(zhuǎn)類型,可以取以下值:
- flipCode > 0:水平翻轉(zhuǎn)(沿y軸翻轉(zhuǎn))
- flipCode = 0:垂直翻轉(zhuǎn)(沿x軸翻轉(zhuǎn))
- flipCode < 0:同時(shí)沿水平和垂直方向翻轉(zhuǎn)
圖像保存
處理完圖像后,我們可以通過cv2.imwrite()將圖像保存到磁盤上。以下是保存圖像的代碼:
# 保存圖像
cv2.imwrite('output_image.jpg', gray_image)
視頻相關(guān)操作
OpenCV不僅可以處理靜態(tài)圖像,還能夠處理視頻數(shù)據(jù)。無論是從攝像頭實(shí)時(shí)獲取視頻,還是讀取視頻文件,都可以通過OpenCV輕松完成。
方法講解
cv2.VideoCapture():VideoCapture() 是 OpenCV 用于捕獲視頻流的類,無論是從文件、攝像頭,還是網(wǎng)絡(luò)攝像頭,都會(huì)使用它。它接受視頻源作為參數(shù),參數(shù)可以是攝像頭的索引(如本地?cái)z像頭索引為 0)、視頻文件的路徑、或者網(wǎng)絡(luò)攝像頭的 URL 地址。video_capture.isOpened():用于檢查視頻源是否成功打開。它返回一個(gè)布爾值,True 表示視頻源成功打開,F(xiàn)alse 則表示打開失敗。video_capture.read():從視頻流中讀取一幀圖像。返回值有兩個(gè),分別是ret表示是否成功讀取到幀,成功時(shí)為 True,失敗時(shí)為 False。frame讀取到的當(dāng)前幀,通常是一個(gè) numpy 數(shù)組,表示圖像的數(shù)據(jù)。這個(gè)方法是視頻處理中核心的循環(huán)部分,每次調(diào)用都會(huì)返回下一幀視頻圖像。如果 ret 為 False,通常表示視頻流已經(jīng)結(jié)束或讀取出錯(cuò)。cv2.imshow():用于在窗口中顯示圖像或視頻幀。有兩個(gè)參數(shù),分別是窗口名和要顯示的圖像或視頻幀,它是一個(gè)包含圖像數(shù)據(jù)的 numpy 數(shù)組。
讀取視頻
首先,我們要知道如何讀取視頻文件。OpenCV提供了cv2.VideoCapture()方法用于打開視頻文件或攝像頭。
import cv2
# 打開視頻文件
video_capture = cv2.VideoCapture('path_to_video.mp4')
# 檢查視頻是否成功打開
if not video_capture.isOpened():
print("無法打開視頻文件")
exit()
# 循環(huán)讀取視頻幀
while True:
ret, frame = video_capture.read()
# 如果讀取成功
if ret:
# 顯示當(dāng)前幀
cv2.imshow('Video', frame)
# 等待鍵盤輸入,如果按下'q'鍵,退出循環(huán)
if cv2.waitKey(25) & 0xFF == ord('q'):
break
else:
break
# 釋放視頻資源
video_capture.release()
cv2.destroyAllWindows()
從攝像頭讀取視頻
除了讀取視頻文件,OpenCV 也可以直接從電腦的攝像頭獲取視頻流。cv2.VideoCapture(0) 表示打開默認(rèn)攝像頭。
import cv2
# 打開攝像頭
video_capture = cv2.VideoCapture(0)
# 檢查攝像頭是否成功打開
if not video_capture.isOpened():
print("無法打開攝像頭")
exit()
# 循環(huán)讀取視頻幀
while True:
ret, frame = video_capture.read()
# 如果讀取成功
if ret:
# 顯示當(dāng)前幀
cv2.imshow('Webcam Video', frame)
# 按下'q'鍵退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# 釋放攝像頭資源
video_capture.release()
cv2.destroyAllWindows()
注意:也可以通過網(wǎng)絡(luò)攝像頭的訪問地址,通常是 HTTP 或 RTSP 協(xié)議??梢酝ㄟ^ IP 地址和端口訪問視頻流。有時(shí)需要攝像頭的認(rèn)證(用戶名和密碼),可以將其嵌入到URL中。 例如:
rtsp://username:password@your_camera_ip:port/stream
到此這篇關(guān)于Python第三方庫之OpenCV庫的實(shí)用指南的文章就介紹到這了,更多相關(guān)Python OpenCV庫使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中map,reduce,filter和sorted函數(shù)的使用方法
這篇文章主要介紹了Python中map,reduce,filter和sorted函數(shù)的使用方法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-08-08
python urllib urlopen()對(duì)象方法/代理的補(bǔ)充說明
這篇文章主要介紹了python urllib urlopen()對(duì)象方法/代理的補(bǔ)充說明的相關(guān)資料,需要的朋友可以參考下2017-06-06
以windows service方式運(yùn)行Python程序的方法
這篇文章主要介紹了以windows service方式運(yùn)行Python程序的方法,可實(shí)現(xiàn)將Python程序變成windows服務(wù)的功能,需要的朋友可以參考下2015-06-06
PyHacker實(shí)現(xiàn)網(wǎng)站后臺(tái)掃描器編寫指南
這篇文章主要為大家介紹了PyHacker實(shí)現(xiàn)網(wǎng)站后臺(tái)掃描器編寫指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python pymysql連接數(shù)據(jù)庫并將查詢結(jié)果轉(zhuǎn)化為Pandas dataframe
這篇文章主要為大家介紹了Python pymysql連接數(shù)據(jù)庫并將結(jié)果轉(zhuǎn)化為Pandas dataframe實(shí)現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
python神經(jīng)網(wǎng)絡(luò)Xception模型復(fù)現(xiàn)詳解
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)Xception模型復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python+Tkinter繪制一個(gè)數(shù)字時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了Python使用Tkinter繪制一個(gè)數(shù)字時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
使用Python編寫一個(gè)自動(dòng)化辦公小助手
在日常辦公中,我們常常會(huì)遇到一些重復(fù)性的任務(wù),如批量處理文件,發(fā)送郵件等,本文我們將使用Python 編寫一個(gè)自動(dòng)化辦公小助手,幫助你高效完成這些任務(wù)2025-10-10
Python騷操作完美實(shí)現(xiàn)短視頻偽原創(chuàng)
剪輯的視頻上傳到某平臺(tái)碰到降權(quán)怎么辦?視頻平臺(tái)都有一套自己的鑒別算法,專門用于處理視頻的二次剪輯,本篇我們來用python做一些特殊處理2022-02-02

