OpenCV計算機視覺實戰(2)——環境搭建與OpenCV簡介

OpenCV計算機視覺實戰(2)——環境搭建與OpenCV簡介

    • 0. 前言
    • 1. OpenCV 安裝與配置
      • 1.1 安裝 Python-OpenCV
      • 1.2 配置開發環境
    • 2. OpenCV 基礎
      • 2.1 圖像讀取與顯示
      • 2.2 圖像保存
    • 3. 攝像頭實時捕獲
    • 小結
    • 系列鏈接

0. 前言

OpenCV (Open Source Computer Vision Library) 是一個開源計算機視覺庫,廣泛應用于圖像處理、機器視覺、人工智能等領域。本文將手把手教你從環境搭建到運行第一個 OpenCV 程序,包含圖像的讀取、顯示、保存,以及使用攝像頭實時捕獲圖像的基礎操作。

1. OpenCV 安裝與配置

1.1 安裝 Python-OpenCV

通過 pip 快速安裝 OpenCV 的核心模塊和擴展模塊:

# 安裝基礎模塊(核心功能)
pip install opencv-python
# 安裝擴展模塊(包含SIFT/SURF等額外功能)
pip install opencv-contrib-python

安裝完成后,進行驗證:

>>> import cv2
>>> cv2.__version__

1.2 配置開發環境

推薦以下三種開發工具:

工具配置建議
PyCharm創建 Python 項目 → 安裝 opencv-python 包 → 配置虛擬環境
VSCode安裝 Python 擴展 → 使用 Jupyter Notebook 交互式調試
Jupyter Lab適合快速實驗 → 通過 %matplotlib inline 實時顯示圖像

2. OpenCV 基礎

2.1 圖像讀取與顯示

OpenCV 讀取圖像非常簡單,下面是一個 OpenCV 版的 Hello World 程序:

import cv2# 讀取圖像
img = cv2.imread("cat.jpg")  # 顯示圖像(窗口名 + BGR格式數據)
cv2.imshow("Demo", img)  
cv2.waitKey(0)  # 按任意鍵繼續
cv2.destroyAllWindows()  # 關閉所有窗口

執行結果

關鍵函數解析:

  • cv2.imread():讀取圖像,默認參數 cv2.IMREAD_COLOR 為彩色模式(使用參數 cv2.IMREAD_GRAYSCALE 可以讀取為灰度圖像)
  • cv2.imshow():創建一個窗口并顯示圖像
  • cv2.waitKey():參數為等待時間(毫秒),0 表示無限等待直到用戶按鍵
  • cv2.destroyAllWindows():關閉所有 OpenCV 窗口

2.2 圖像保存

OpenCV 提供了 imwrite() 函數來保存圖像到文件:

# 保存圖像(質量參數 0-100)
cv2.imwrite("output.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 90])

參數說明:

  • 第一個參數:保存的文件路徑(包括文件名和擴展名)
  • 第二個參數:要保存的圖像數據
  • 第三個參數(可選):保存參數,以列表形式提供

常用保存參數:

  • JPEG 格式:
[cv2.IMWRITE_JPEG_QUALITY, quality]  # quality: 0-100,默認95
  • PNG 格式:
[cv2.IMWRITE_PNG_COMPRESSION, compression]  # compression: 0-9,默認1
  • WEBP 格式:
[cv2.IMWRITE_WEBP_QUALITY, quality]  # quality: 1-100,默認100

3. 攝像頭實時捕獲

使用以下 OpenCV 代碼可以方便的實時讀取電腦攝像頭視頻流:

import cv2
# 打開默認攝像頭(設備索引為0)
cap = cv2.VideoCapture(0)# 檢查攝像頭是否成功打開
if not cap.isOpened():print("無法打開攝像頭")exit()
while True:# 逐幀捕獲ret, frame = cap.read()if not ret:print("無法接收幀,退出")break# 顯示捕獲到的幀cv2.imshow('Live Video', frame)# 如果按下 'q' 鍵,則退出循環if cv2.waitKey(1) & 0xFF == ord('q'):break# 釋放資源
cap.release()
cv2.destroyAllWindows()

攝像頭
關鍵函數解析:

  • cv2.VideoCapture(0):初始化攝像頭,0 通常代表計算機的默認攝像頭,如果有多個攝像頭,可以嘗試 12 等索引,也可以傳入視頻文件路徑來讀取視頻文件
  • cap.read():讀取一幀,返回值有兩個,ret:布爾值,表示是否成功讀取幀,如果讀取失敗,retFalse,應退出循環;frame:當前幀的圖像數據
  • cv2.imshow():顯示捕獲到的幀,可以在循環中添加任意圖像處理操作,可以同時顯示多個窗口展示不同的處理效果
  • cv2.waitKey(1) & 0xFF == ord('q'):按 q 退出,ord('q') 獲取字符 qASCII
  • cap.release():釋放攝像頭資源

除此之外,我們也可以對攝像頭進行高級設置,例如,設定分辨率:

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

獲取和設置幀率:

# 獲取當前幀率
fps = cap.get(cv2.CAP_PROP_FPS)# 設置幀率
cap.set(cv2.CAP_PROP_FPS, 30)

其他常用屬性的設置:

# 亮度
cap.set(cv2.CAP_PROP_BRIGHTNESS, 0.5)  # 0-1
# 對比度
cap.set(cv2.CAP_PROP_CONTRAST, 0.5)  # 0-1
# 飽和度
cap.set(cv2.CAP_PROP_SATURATION, 0.5)  # 0-1
# 增益
cap.set(cv2.CAP_PROP_GAIN, 0)  # 自動增益通常為0
# 曝光
cap.set(cv2.CAP_PROP_EXPOSURE, -7)  # 負值表示自動曝光

檢查攝像頭支持的屬性:

for i in range(0, 18):print(f"Property {i}: {cap.get(i)}")

屬性打印

小結

通過本文,我們已經完成了 OpenCV 環境的搭建,了解了基本圖像讀取、顯示、保存的方法,并學會了如何使用攝像頭捕獲實時視頻幀。

系列鏈接

OpenCV計算機視覺實戰(1)——計算機視覺簡介

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79210.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79210.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79210.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu22.04安裝顯卡驅動與cuda+cuDNN

背景: 緊接前文:Proxmox VE 8.4 顯卡直通完整指南:NVIDIA 2080 Ti 實戰。在R740服務器完成了proxmox的安裝,并且安裝了一張2080ti 魔改22g顯存的的顯卡。配置完了proxmox顯卡直通,并將顯卡掛載到了vm 301(…

A2A Python 教程 - 綜合指南

目錄 ? 介紹? 設置環境? 創建項目? 代理技能? 代理卡片? A2A服務器? 與A2A服務器交互? 添加代理功能? 使用本地Ollama模型? 后續步驟 介紹 在本教程中,您將使用Python構建一個簡單的echo A2A服務器。這個基礎實現將向您展示A2A提供的所有功能。完成本教…

MySQL基礎關鍵_005_DQL(四)

目 錄 一、分組函數 1.說明 2.max/min 3.sum/avg/count 二、分組查詢 1.說明 2.實例 (1)查詢崗位和平均薪資 (2)查詢每個部門編號的不同崗位的最低薪資 3.having (1)說明 (2&#xff…

GAMES202-高質量實時渲染(Assignment 2)

目錄 作業介紹環境光貼圖預計算傳輸項的預計算Diffuse unshadowedDiffuse shadowedDiffuse Inter-reflection(bonus) 實時球諧光照計算 GitHub主頁:https://github.com/sdpyy1 作業實現:https://github.com/sdpyy1/CppLearn/tree/main/games202 作業介紹 物體在不同…

2025年- H21-Lc129-160. 相交鏈表(鏈表)---java版

1.題目描述 2.思路 當pa!pb的時候,執行pa不為空,遍歷pa鏈表。執行pb不為空,遍歷pb鏈表。 3.代碼實現 // 單鏈表節點定義 class ListNode {int val;ListNode next;ListNode(int x){valx;nextnull;}}public class H160 {// 主方法…

win10系統安卓開發環境搭建

一 安裝jdk 下載jdk17 ,下載路徑:https://download.oracle.com/java/17/archive/jdk-17.0.12_windows-x64_bin.exe 下載完畢后,按照提示一步步完成,然后接著創建環境變量, 在cmd控制臺輸入java -version 驗證: 有上面的輸出代表jdk安裝并配置成功。 二 安裝Android stu…

【算法基礎】選擇排序算法 - JAVA

一、算法基礎 1.1 什么是選擇排序 選擇排序是一種簡單直觀的排序算法,它的工作原理是:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再從剩余未排序元素中繼續尋找最小&#xf…

LabVIEW異步調用VI介紹

在 LabVIEW 編程環境里,借助結合異步 VI 調用,并使用 “Open VI Reference” 函數上的 “Enable simultaneous calls on reentrant VIs” 選項(0x40),達成了對多個 VI 調用執行效率的優化。以下將從多方面詳細介紹該 V…

Leetcode刷題 | Day50_圖論02_島嶼問題01_dfs兩種方法+bfs一種方法

一、學習任務 99. 島嶼數量_深搜dfs代碼隨想錄99. 島嶼數量_廣搜bfs100. 島嶼的最大面積101. 孤島的總面積 第一類DFS(主函數中處理第一個節點,DFS處理相連節點): 主函數中先將起始節點標記為已訪問DFS函數中不處理起始節點&…

深入理解網絡安全中的加密技術

1 引言 在當今數字化的世界中,網絡安全已經成為個人隱私保護、企業數據安全乃至國家安全的重要組成部分。隨著網絡攻擊的復雜性和頻率不斷增加,保護敏感信息不被未授權訪問變得尤為關鍵。加密技術作為保障信息安全的核心手段,通過將信息轉換為…

舊版本NotionNext圖片失效最小改動解決思路

舊版本NotionNext圖片失效最小改動解決思路 契機 好久沒寫博客了,最近在notion寫博客的時候發現用notionNext同步到個人網站時,圖片無法預覽。猜測是notion加了防盜鏈措施,去notionNext官方github上尋找解決方案,需要升級到4.8.…

深度學習筆記40_中文文本分類-Pytorch實現

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 | 接輔導、項目定制 一、我的環境 1.語言環境:Python 3.8 2.編譯器:Pycharm 3.深度學習環境: torch1.12.1cu113torchvision…

010302-oss_反向代理_負載均衡-web擴展2-基礎入門-網絡安全

文章目錄 1 OSS1.1 什么是 OSS 存儲?1.2 OSS 核心功能1.3 OSS 的優勢1.4 典型使用場景1.5 如何接入 OSS?1.6 注意事項1.7 cloudreve實戰演示1.7.1 配置cloudreve連接阿里云oss1.7.2 常見錯誤1.7.3 安全測試影響 2 反向代理2.1 正向代理和反向代理2.2 演示…

【 Node.js】 Node.js安裝

下載 下載 | Node.js 中文網https://nodejs.cn/download/ 安裝 雙擊安裝包 點擊Next 勾選使用許可協議,點擊Next 選擇安裝位置 點擊Next 點擊Next 點擊Install 點擊Finish 完成安裝 添加環境變量 編輯【系統變量】下的變量【Path】添加Node.js的安裝路徑--如果…

Python基本語法(自定義函數)

自定義函數 Python語言沒有子程序,只有自定義函數,目的是方便我們重復使用相同的一 段程序。將常用的代碼塊定義為一個函數,以后想實現相同的操作時,只要調用函數名就可以了,而不需要重復輸入所有的語句。 函數的定義…

OpenGL-ES 學習(11) ---- EGL

目錄 EGL 介紹EGL 類型和初始化EGL初始化方法獲取 eglDisplay初始化 EGL選擇 Config構造 Surface構造 Context開始繪制 EGL Demo EGL 介紹 OpenGL-ES 是一個操作GPU的圖像API標準,它通過驅動向 GPU 發送相關圖形指令,控制圖形渲染管線狀態機的運行狀態&…

極簡5G專網解決方案

極簡5G專網解決方案 利用便攜式即插即用私有 5G 網絡提升您的智能創新。為您的企業提供無縫、安全且可擴展的 5G 解決方案。 提供極簡5G專網解決方案 Mantiswave Network Private Limited 提供全面的 5G 專用網絡解決方案,以滿足您企業的獨特需求。我們創新的“…

html:table表格

表格代碼示例&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><!-- 標準表格。 --><table border"5"cellspacing&qu…

tkinter 電子時鐘 實現時間日期 可實現透明

以下是一個使用Tkinter模塊創建一個簡單的電子時鐘并顯示時間和日期的示例代碼&#xff1a; import tkinter as tk import time# 創建主窗口 root tk.Tk() root.overrideredirect(True) # 隱藏標題欄 root.attributes(-alpha, 0.7) # 設置透明度# 顯示時間的標簽 time_labe…