使用Python和OpenCV實現圖像識別與目標檢測

在計算機視覺領域,圖像識別和目標檢測是兩個非常重要的任務。圖像識別是指識別圖像中的內容,例如判斷一張圖片中是否包含某個特定物體;目標檢測則是在圖像中定位并識別多個物體的位置和類別。OpenCV是一個功能強大的開源計算機視覺庫,它提供了豐富的圖像處理和目標檢測功能。本文將通過一個簡單的示例,介紹如何使用Python和OpenCV實現圖像識別與目標檢測。
一、環境準備
在開始之前,確保你的開發環境中已經安裝了Python和OpenCV。如果尚未安裝,可以通過以下命令安裝OpenCV:

pip install opencv-python

此外,還需要安裝matplotlib庫,用于圖像顯示:

pip install matplotlib

二、圖像識別:使用預訓練模型進行圖像分類
OpenCV提供了一些預訓練的深度學習模型,可以用于圖像分類。我們將使用一個預訓練的MobileNet模型來識別圖像中的物體。
(一)加載預訓練模型
OpenCV提供了cv2.dnn.readNetFromCaffe方法,用于加載預訓練的Caffe模型。你可以從OpenCV的官方GitHub倉庫下載預訓練模型文件和配置文件。

import cv2
import numpy as np
import matplotlib.pyplot as plt# 加載預訓練的MobileNet模型
prototxt_path = "MobileNetSSD_deploy.prototxt"
model_path = "MobileNetSSD_deploy.caffemodel"
net = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)# 加載類別名稱
classes = ["background", "aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]

(二)圖像預處理
在進行圖像分類之前,需要對圖像進行預處理,包括調整圖像大小和歸一化。

# 加載圖像
image = cv2.imread("example.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 調整圖像大小
input_size = (300, 300)
image_resized = cv2.resize(image, input_size)# 歸一化
blob = cv2.dnn.blobFromImage(image_resized, 0.007843, input_size, (127.5, 127.5, 127.5))


(三)使用模型進行預測
將預處理后的圖像輸入模型,獲取預測結果。

# 將圖像輸入模型
net.setInput(blob)
detections = net.forward()# 解析檢測結果
for i in range(detections.shape[2]):confidence = detections[0, 0, i, 2]if confidence > 0.5:  # 置信度閾值class_id = int(detections[0, 0, i, 1])class_name = classes[class_id]box = detections[0, 0, i, 3:7] * np.array([image.shape[1], image.shape[0], image.shape[1], image.shape[0]])(startX, startY, endX, endY) = box.astype("int")cv2.rectangle(image, (startX, startY), (endX, endY), (0, 255, 0), 2)cv2.putText(image, f"{class_name}: {confidence:.2f}", (startX, startY - 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)# 顯示結果
plt.imshow(image)
plt.axis("off")
plt.show()

三、目標檢測:使用OpenCV實現目標檢測
除了圖像分類,OpenCV還支持目標檢測。我們將使用OpenCV的cv2.CascadeClassifier方法實現人臉檢測。
(一)加載預訓練的Haar級聯分類器
OpenCV提供了一些預訓練的Haar級聯分類器,可以用于檢測人臉、眼睛等目標。

# 加載預訓練的Haar級聯分類器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')

(二)檢測人臉和眼睛
使用detectMultiScale方法檢測圖像中的人臉和眼睛。

# 加載圖像
image = cv2.imread("example.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 檢測人臉
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))# 繪制人臉框
for (x, y, w, h) in faces:cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)roi_gray = gray[y:y+h, x:x+w]roi_color = image[y:y+h, x:x+w]eyes = eye_cascade.detectMultiScale(roi_gray)for (ex, ey, ew, eh) in eyes:cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)# 顯示結果
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、總結
通過本文,我們介紹了如何使用Python和OpenCV實現圖像識別與目標檢測。我們使用了預訓練的MobileNet模型進行圖像分類,并使用Haar級聯分類器進行人臉檢測。希望這篇文章能夠幫助初學者快速入門計算機視覺,并激發讀者進一步探索更復雜目標檢測算法的興趣。
----
希望這篇文章能夠滿足你的需求!如果需要進一步調整或補充,請隨時告訴我。

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

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

相關文章

《基于Apache Flink的流處理》筆記

思維導圖 1-3 章 4-7章 8-11 章 參考資料 源碼: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚會及會議 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…

LLaMA-Factory 微調 Qwen2-VL 進行人臉情感識別(二)

在上一篇文章中,我們詳細介紹了如何使用LLaMA-Factory框架對Qwen2-VL大模型進行微調,以實現人臉情感識別的功能。本篇文章將聚焦于微調完成后,如何調用這個模型進行人臉情感識別的具體代碼實現,包括詳細的步驟和注釋。 模型調用步驟 環境準備:確保安裝了必要的Python庫。…

Splash動態渲染技術全解析:從基礎到企業級應用(2025最新版)

引言 在Web 3.0時代,87%的網站采用JavaScript動態渲染技術。傳統爬蟲難以應對Ajax加載、SPA應用等場景,Splash作為專業的JavaScript渲染服務,憑借??Lua腳本控制??和??異步處理能力??,已成為動態數據抓取的核心工具。本文…

【應用】Ghost Dance:利用慣性動捕構建虛擬舞伴

Ghost Dance是葡萄牙大學的一個研究項目,研究方向是探索人與人之間的聯系,以及如何通過虛擬舞伴重現這種聯系。項目負責人Cecilia和Rui利用慣性動捕創造出具有流暢動作的虛擬舞伴,讓現實中的舞者也能與之共舞。 挑戰:Ghost Danc…

廣目軟件GM DC Monitor

廣目(北京)軟件有限公司成立于2024年,技術和研發團隊均來自于一家具有近10年監控系統研發的企業。廣目的技術團隊一共實施了9家政府單位、1家股份制銀行、1家芯片制造企業的數據中心監控預警項目。這11家政企單位由2家正部級、1家副部級、6家…

12-Oracle 23ai Vector 使用ONNX模型生成向量嵌入

一、Oracle 23ai Vector Embeddings 核心概念? 向量嵌入(Vector Embeddings)?? -- 將非結構化數據(文本/圖像)轉換為數值向量 - - 捕獲數據的語義含義而非原始內容 - 示例:"數據庫" → [0.24, -0.78, 0.5…

用 NGINX 構建高效 POP3 代理`ngx_mail_pop3_module`

一、模塊定位與作用 協議代理 ngx_mail_pop3_module 讓 NGINX 能夠充當 POP3 代理:客戶端與后端 POP3 服務器之間的所有請求均轉發到 NGINX,由 NGINX 負責與后端會話邏輯。認證方式控制 通過 pop3_auth 指令指定允許客戶端使用的 POP3 認證方法&#xf…

每日算法 -【Swift 算法】三數之和

Swift|三數之和(3Sum)詳細題解 注釋 拓展(LeetCode 15) ?題目描述 給你一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a, b, c,使得 a b c 0。請你找出所有和為 0 且不重…

服務器磁盤空間被Docker容器日志占滿處理方法

事發場景: 原本正常的服務停止運行了,查看時MQTT服務鏈接失敗,查看對應的容器服務發現是EMQX鏡像停止運行了,重啟也是也報錯無法正常運行,報錯如下圖: 報錯日志中連續出現兩個"no space left on devi…

令牌桶 滑動窗口->限流 分布式信號量->限并發的原理 lua腳本分析介紹

文章目錄 前言限流限制并發的實際理解限流令牌桶代碼實現結果分析令牌桶lua的模擬實現原理總結: 滑動窗口代碼實現結果分析lua腳本原理解析 限并發分布式信號量代碼實現結果分析lua腳本實現原理 雙注解去實現限流 并發結果分析: 實際業務去理解體會統一注…

基于uniapp+WebSocket實現聊天對話、消息監聽、消息推送、聊天室等功能,多端兼容

基于 ?UniApp + WebSocket?實現多端兼容的實時通訊系統,涵蓋WebSocket連接建立、消息收發機制、多端兼容性配置、消息實時監聽等功能,適配?微信小程序、H5、Android、iOS等終端 目錄 技術選型分析WebSocket協議優勢UniApp跨平臺特性WebSocket 基礎實現連接管理消息收發連接…

Linux中shell編程表達式和數組講解

一、表達式 1.1 測試表達式 樣式1: test 條件表達式 樣式2: [ 條件表達式 ] 注意:以上兩種方法的作用完全一樣,后者為常用。但后者需要注意方括號[、]與條件表達式之間至少有一個空格。test跟 [] 的意思一樣條件成立,狀態返回值是0條件不成…

深入了解JavaScript當中如何確定值的類型

JavaScript是一種弱類型語言,當你給一個變量賦了一個值,該值是什么類型的,那么該變量就是什么類型的,并且你還可以給一個變量賦多種類型的值,也不會報錯,這就是JavaScript的內部機制所決定的,那…

【p2p、分布式,區塊鏈筆記 MESH】Bluetooth藍牙通信拓撲與操作 BR/EDR(經典藍牙)和 BLE

目錄 1. BR/EDR(經典藍牙)網絡結構微微網(Piconet)散射網(Scatternet)藍牙 BR/EDR 拓撲結構示意圖 2. BLE(低功耗藍牙)網絡結構廣播器與觀察者(Broadcaster and Observer…

C++虛函數表(虛表Virtual Table,簡稱vtable、VFT)(編譯器為支持運行時多態(動態綁定)而自動生成的一種內部數據結構)虛函數指針vptr

文章目錄 **1. 虛函數表的核心概念**- **虛函數表(vtable)**:- **虛函數指針(vptr)**: **2. 虛函數表的生成與工作流程****生成時機**- **當一個類中至少有一個虛函數時**,編譯器會為該類生成一…

使用Python和TensorFlow實現圖像分類

最近研學過程中發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊鏈接跳轉到網站人工智能及編程語言學習教程。讀者們可以通過里面的文章詳細了解一下人工智能及其編程等教程和學習方法。下面開始對正文內容的…

Unity UI 性能優化--Sprite 篇

🎯 Unity UI 性能優化終極指南 — Sprite篇 🧩 Sprite 是什么?—— 渲染的基石與性能的源頭 在Unity的2D渲染管線中,Sprite 扮演著至關重要的角色。它不僅僅是2D圖像資源本身,更是GPU進行渲染批處理(Batch…

【git】把本地更改提交遠程新分支feature_g

創建并切換新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “實現圖片上傳功能” 推送到遠程 git push -u origin feature_g

vue中加載Cesium地圖(天地圖、高德地圖)

目錄 1、將下載的Cesium包移動至public下 2、首先需要將Cesium.js和widgets.css文件引入到 3、 新建Cesium.js文件,方便在全局使用 4、新建cesium.vue文件,展示三維地圖 1、將下載的Cesium包移動至public下 npm install cesium后??????? 2、…

Elasticsearch的插件(Plugin)系統介紹

Elasticsearch的插件(Plugin)系統是一種擴展機制,允許用戶通過添加自定義功能來增強默認功能,而無需修改核心代碼。插件可以提供從分析器、存儲后端到安全認證、機器學習等各種功能,使Elasticsearch能夠靈活適應不同的應用場景和業務需求。 一、插件的核心特點 模塊化擴展…