OpenCV 入門:基礎圖像操作

在計算機視覺領域,OpenCV 無疑是最受歡迎的開源庫之一。它由 Intel 公司俄羅斯團隊發起,如今已成為處理圖像和視頻的強大工具。本文我會介紹OpenCV 的基礎知識,從圖像的讀寫顯示到實時視頻流處理,邁出計算機視覺的第一步。

目錄

OpenCV 為何值得學習?

圖像的基本操作

讀取、顯示與保存圖像

圖像的像素操作

繪制幾何圖形

實時視頻流處理

總結


OpenCV 為何值得學習?

OpenCV 之所以被廣泛應用,得益于其三大優勢:

首先是多語言支持,雖然基于 C++ 實現,但提供了 Python、Ruby、Matlab 等多種語言接口,其中 OpenCV-Python 結合了 C++ 的高性能和 Python 的簡潔易讀性。

其次是跨平臺特性,可在 Windows、Linux、OS X、Android 和 iOS 等系統上運行,甚至支持基于 CUDA 和 OpenCL 的 GPU 加速。

最后是豐富的 API,涵蓋了傳統計算機視覺算法、主流機器學習算法,還添加了對深度學習的支持,滿足各種視覺處理需求。

對于 Python 開發者來說,安裝 OpenCV 非常簡單,使用國內鏡像源可快速完成:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

圖像的基本操作

讀取、顯示與保存圖像

處理圖像的第一步是掌握基本的 IO 操作。OpenCV 提供了簡潔的接口完成這些任務:

import cv2
import numpy as np# 讀取圖像(默認彩色模式)
img = cv2.imread('image.jpg')# 顯示圖像
cv2.imshow("Image Window", img)
# 等待用戶按鍵(0表示無限等待)
cv2.waitKey(0)
# 關閉所有窗口
cv2.destroyAllWindows()# 保存圖像
cv2.imwrite("saved_image.jpg", img)

需要注意的是,cv2.waitKey()是顯示圖像不可或缺的部分,它給圖像繪制留下時間,API里面填寫的為多少毫秒,否則窗口可能無響應。

圖像的像素操作

在計算機中,圖像由像素組成。彩色圖像通常由 RGB(紅、綠、藍)三個通道構成,每個通道的像素值范圍是 0-255。在OpenCV中使用的BGR通道,我們可以直接操作像素值:

# 獲取某個像素點的值(BGR格式,注意與RGB順序不同)
px = img[100, 100]
print(px)  # 輸出 [B, G, R] 值# 修改像素值(設置為紅色)
img[100, 100] = [0, 0, 255]

繪制幾何圖形

OpenCV 提供了繪制各種幾何圖形的函數,方便我們在圖像上添加標記:

# 繪制直線(起點、終點、藍色、線寬2)
cv2.line(img, (100, 100), (200, 200), (255, 0, 0), 2)# 繪制圓形(圓心、半徑50、黃顏色、線寬2)
cv2.circle(img, (300, 300), 50, (0, 255, 255), 2)# 繪制矩形(左上角、右下角、藍色、線寬2)
cv2.rectangle(img, (100, 200), (300, 300), (255, 0, 0), 2)# 添加文字(內容、位置、字體、大小、青藍色、線寬4、抗鋸齒)
cv2.putText(img, 'Hello OpenCV', (100, 200), cv2.FONT_ITALIC, 1, (255, 255, 0), 4, cv2.LINE_AA)

注意:在OpenCV中添加文字無法使用中文字符,會顯示亂碼,所以實際中常使用三大庫中的matplotlib來實現添加中文字符。
?

實時視頻流處理

除了靜態圖像,OpenCV 還能輕松處理實時視頻流。通過電腦攝像頭捕獲視頻的代碼如下:

import cv2# 創建VideoCapture對象,參數0表示使用默認攝像頭
cap = cv2.VideoCapture(0)while True:# 讀取一幀視頻(ret為是否成功讀取的標志,frame為幀數據)ret, frame = cap.read()# 如果讀取失敗則退出循環if not ret:break# 在這里可以添加對幀的處理(如灰度化、繪制圖形等)# 示例:轉為灰度圖gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 顯示處理后的幀cv2.imshow('Camera Feed', gray_frame)# 按'q'鍵退出循環if cv2.waitKey(1) & 0xFF == ord('q'):break# 釋放攝像頭資源并關閉所有窗口
cap.release()
cv2.destroyAllWindows()

這段代碼的核心是VideoCapture類,它負責從攝像頭獲取視頻流。通過循環不斷讀取幀并處理,實現實時視頻處理的效果。參數為0表示使用默認攝像頭,也可以傳入視頻所在地址。

waitKey(1)確保每幀之間有 1 毫秒的延遲,既保證視頻流暢,又能檢測按鍵輸入。

總結

本文我介紹了 OpenCV 的基本操作,包括圖像的讀寫顯示、像素操作、幾何圖形繪制以及實時視頻流處理。這些基礎操作是進行更復雜計算機視覺任務的基石,例如目標檢測、圖像分割等。

OpenCV 的強大之處在于它將復雜的視覺算法封裝成簡單易用的接口,讓開發者可以專注于業務邏輯而非底層實現。

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

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

相關文章

大語言模型 LLM 通過 Excel 知識庫 增強日志分析,根因分析能力的技術方案(3):使用云平臺最小外部依賴方案

文章大綱 1 方案總覽(與官方文檔映射) 2 環境準備(一步完成) 3 數據層(零代碼遷移 Excel → BigQuery 或 SQLite) 4 函數聲明(JSON Schema 與官方示例一致) 5 Cloud Function(**最小外部依賴**) 6 客戶端調用(對齊官方 Python 示例) 7 Token 與性能對比(官方計費口…

C++高效實現軌跡規劃、自動泊車、RTS游戲、戰術迂回包抄、空中軌跡、手術機器人、KD樹

C++ 算法匯總 基于C++的城市道路場景 以下是基于C++的城市道路場景中車輛緊急變道軌跡生成的實現方法和示例代碼。內容涵蓋軌跡規劃算法、數學建模及代碼實現,適用于自動駕駛或駕駛輔助系統開發。 基于多項式曲線的軌跡生成 采用五次多項式(Quintic Polynomial)生成平滑…

電動汽車轉向系統及其工作原理

電動汽車的轉向系統作為電動汽車的一個關鍵系統,與燃油車的轉向系統有著較大差異。電動汽車的轉向系統主要分為 電動助力轉向(EPS, Electric Power Steering) 、電動液壓助力轉向系統(EHPS, Electro-Hydraulic Power Steering&…

TCP/IP 體系結構網絡接口層的原理

TCP/IP 網絡接口層詳解 網絡接口層(Network Interface Layer)是 TCP/IP 模型的最底層(對應 OSI 模型的物理層 數據鏈路層),負責在物理網絡中傳輸原始比特流,實現相鄰設備之間的可靠數據傳輸。核心功能物理…

筆記本鍵盤的啟用和禁用

管理員 打開 CMD:這一步要求以管理員權限打開命令提示符(Command Prompt)。在Windows系統中,可以通過搜索“cmd”,然后右鍵選擇“以管理員身份運行”來實現。sc config i8042prt start disabled (關閉筆記本鍵盤)&…

vue3的一些淺顯用法

1/ 父頁面調用子頁面相關需要在父頁面引用 <FieldUserForm ref"userFormRef" success"handleUserFormSuccess" />其中 FieldUserForm 是子頁面 success"handleUserFormSuccess" 是子頁面成功后回調方法 父頁面 實現 handleUserFormSucces…

C語言習題講解-第五講-循環編程練習等

C語言習題講解-第五講-循環編程練習等1. 關于一維數組描述不正確的是&#xff1a;( )2. 關于一維數組初始化&#xff0c;下面哪個定義是錯誤的&#xff1f;&#xff08; &#xff09;3. 定義了一維 int 型數組 a[10] 后&#xff0c;下面錯誤的引用是&#xff1a;&#xff08; &…

MongoDB索引及其原理

目錄 索引原理 索引類型 單鍵索引 組合索引 特性索引 唯一索引 稀疏索引 部分索引 TTL索引 多鍵索引 文本索引 地理空間索引 哈希索引 總結 MongoDB 索引執行計劃 索引原理 MongoDB索引的背后的原理和MySQL中的索引原理是差不多的,都是使用B數來對數據進行管理…

學習嵌入式的第三十三天-數據結構-(2025.7.25)服務器/多客戶端模型

服務器/多客戶端模型循環服務器 while(1){ accept(); recv(); } 適用于簡單任務&#xff0c;如基礎Web服務器&#xff0c;但無法處理并發請求。并發服務器 通過thread或fork實現多任務處理。需注意子進程/線程的資源回收&#xff0c;避免內存泄漏。多路IO模型服務器 使用select…

【Canvas與標牌】優質資產六角星標牌

【成圖】【代碼】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>優質資產六角星標記 Draft1</title><style type"text/cs…

掃雷游戲開發教程:從零打造精美像素掃雷

完整源碼在本文結尾處一、游戲概述 掃雷是一款經典的益智游戲&#xff0c;玩家需要在不觸發地雷的情況下揭開所有安全格子。本教程將帶你從零開始開發一個具有精美界面和動畫效果的掃雷游戲&#xff0c;包含難度選擇、棋盤大小調整等高級功能。 二、游戲核心功能 三種難度級別&…

Linux驅動開發筆記(五)——設備樹(上)

內容詳見《【正點原子】I.MX6U嵌入式Linux驅動開發指南》四十三章 開發板&#xff1a;imx6ull mini 虛擬機&#xff1a;VMware17 ubuntu&#xff1a;ubuntu20.04 一、什么是設備樹 視頻&#xff1a;第6.1講 Linux設備樹詳解-什么是設備樹&#xff1f;_嗶哩嗶哩_bilibili 對…

【QT入門到晉級】window opencv安裝及引入qtcreator(包含兩種qt編譯器:MSVC和MinGW)

前言 本文主要分享QT的兩種編譯器環境&#xff08;MSVC和MinGW&#xff09;下&#xff0c;安裝及引入opencv的方法。 編譯器區別 特性????MSVC????MinGW????編譯器類型??微軟專有編譯器&#xff08;cl.exe&#xff09;基于GCC的開源工具鏈??平臺支持??僅Wi…

字節跳動Coze Studio開源了!架構解析

Coze Studio 是字節跳動推出的一款 AI 應用開發平臺&#xff0c;專注于幫助開發者快速構建、測試和部署基于大語言模型的智能應用。其整體架構圍繞“低代碼開發 AI 應用”的核心目標設計&#xff0c;融合了模型能力、工具集成、流程編排和多端部署等功能。以下是其整體架構的詳…

Claude 4.0 終極編程指南:模型對比、API配置與IDE集成實戰

Claude 4.0 終極編程指南&#xff1a;模型對比、API配置與IDE集成實戰 基于官方文檔及可驗證數據源&#xff08;2025年7月更新&#xff09; 1 Claude 4.0 技術解析&#xff1a;對比競品的核心優勢與局限 1.1 官方性能數據&#xff08;來源&#xff1a;Anthropic技術白皮書&…

優化:Toc小程序猜你喜歡功能

引言&#xff1a;來自自創的小程序中熱點接口&#xff0c;本小程序專為在校學生自提點餐使用 一、功能描述 該功能作為一個推薦的職責&#xff0c;根據用戶最近行為給用戶推薦用戶可能喜歡去吃的店鋪&#xff0c;可能比較簡潔&#xff0c;但是需要設計的方面挺多的&#xff0c…

Datawhale AI 夏令營:讓AI理解列車排期表 Notebook(Baseline拆解)

Step1、讀取數據 import pandas as pd import requests import re import json from tqdm import tqdm# 讀取數據 data pd.read_excel(data/info_table.xlsx) data data.fillna(無數據) dataStep2、注冊硅基流動https://cloud.siliconflow.cnQwen/Qwen3-8B 模型可以免費使用&…

vue寫的app設置角標

原生App角標&#xff08;UniApp示例&#xff09;調用plus.runtime.setBadgeNumber方法設置安卓/iOS角標&#xff1a;javascriptCopy Code// 設置角標 plus.runtime.setBadgeNumber(99); // 清除角標&#xff08;部分平臺需特殊處理&#xff09; plus.runtime.setBadgeNumber(0)…

GAN/cGAN中到底要不要注入噪聲

MelGAN論文MelGAN針對的是從mel譜生成語音&#xff0c;里面說當條件很強的時候&#xff0c;隨機噪聲就沒啥用了&#xff0c;因此沒將noise注入到生成器中&#xff1b;運用的判別器也僅有1個輸入&#xff0c;不是cGAN的形式image-to-image translation with conditional adversa…

備份一下我的 mac mini 的環境變量配置情況

export PATH“/opt/homebrew/bin:$PATH” #THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! export SDKMAN_DIR“HOME/.sdkman"[[?s"HOME/.sdkman" [[ -s "HOME/.sdkman"[[?s"HOME/.sdkman/bin/sdkman-init.sh” ]] && so…