Python-初學openCV——對openCV的簡單使用

一、概述

????????1、簡單介紹

????????OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺庫,旨在為實時圖像處理提供強大的功能。它由Intel開發,現由開源社區維護。OpenCV 提供了跨平臺的解決方案,支持 Windows、Linux、macOS、iOS 和 Android 系統,適用于各種應用場景

????????2、OpenCV的主要特點:

????????????????圖像和視頻處理:OpenCV 提供了強大的圖像處理和視頻處理功能,包括圖像讀取、寫? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 入、顯示,圖像濾波、變換、邊緣檢測、輪廓識別等。

????????????????計算機視覺:包括人臉檢測、物體識別、圖像分類、特征匹配、跟蹤目標等高級應用。

????????????????機器學習:內置了一些機器學習算法,支持分類、回歸、聚類等任務。

????????????????GPU加速:支持基于CUDA的GPU加速,能夠在處理大量數據時顯著提高計算效率。

????????????????廣泛的應用場景:被廣泛應用于工業自動化、監控系統、醫療圖像處理、無人駕駛等領? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?域。

? ? ? ? 3、環境安裝

? ? ? ? ? ? ? ? 在要使用openCV的環境中輸入下面指令:

pip install opencv-python

? ? ? ? ? ? ? ? 但直接通過以上命令安裝對網速要求巨大,推薦使用下面的鏡像源安裝:

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

二、使用前的基礎理論知識掌握

? ? ? ? 1、像素

????????????????像素是圖像的基本單元,每個像素存儲著圖像的顏色、亮度和其他特征。一系列像素? ? ? ? ? ? ? ? ?組合到一起就形成了完整的圖像

? ? ? ? 2、通道(RGB)

????????????????opencv中常用的是8位圖像,大多數彩色和灰度圖像使用8位表示每個通道的像素值,范? ? ? ? ? ? ? ?圍從0到255,其中0,代表最黑,1,表示最白。

????????????????日常生活中常見的圖像是RGB三原色圖。RGB圖上的每個點都是由紅(R)、綠? ? ? ? ? ? ? ? ? ? ? (G)、藍(B)三個顏色按照一定比例混合而成的,幾乎所有顏色都可以通過這三種顏色按? ? ? ? ? ? 照不同比例調配而成。在計算機中,RGB三種顏色被稱為RGB三通道,每個通道的取值都? ? ? ? ? ? ? 是0-255,根據這三個通道存儲的像素值,來對應不同的顏色。

? ? ? ? 3、圖像存儲

????????????????在OpenCV中,無論是讀取還是創建圖像,結果都是一個NumPy數組

? ? ? ? ? ? ? ? ? ? ? ? a. 彩色圖像:三維數組

? ? ? ? ? ? ? ? ? ? ? ? b. 灰度圖像:二維數組

? ? ? ? ? ? ? ? 圖像本質上是像素值的二維或三維矩陣(彩色圖像)

? ? ? ? ? ? ? ? ? ? ? ? a. 形狀:圖像的尺寸由其高、寬和通道數決定。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (彩色圖像返回一個包含三個值的元組(h, w, c)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 灰度圖返回一個包含兩個值的元組( h,w)因為灰度圖只有一個通道)

? ? ? ? ? ? ? ? ? ? ? ? b. 數據類型:圖像中的每個像素值的數據類型決定了可以存儲的最大值

? ? ? ? ? ? ? ? ? ? ? ? c. 像素表示:

????????????????????????????????單通道圖像(灰度圖像):每個像素由一個數值表示,代表該點的亮度。值? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????越低(接近0),顏色越暗;值越高(接近255),顏色越亮。

????????????????????????????????多通道圖像(彩色圖像): 在OpenCV中,默認情況下,彩色圖像是以BGR? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????(藍-綠-紅)順序存儲

三、基礎操作

cv2.imshow(圖片名, 讀取的圖片):顯示圖片

(注意:在調用顯示圖像的API后,要調用cv2.waitKey(0)給圖像繪制留下時間,否則窗口會出現無響應情況,并且圖像無法顯示出來)

cv2.waitkey(n): 圖片顯示時長,n 的單位為毫秒,當 n = 0 時,圖片一直顯示

cv2.destroyAllWindows():?關閉所有顯示窗口,釋放資源

? ? ? ? 1、讀取圖片

? ? ? ? ? ? ? ? cv2.imread(path[,讀取方式])

img  = cv2.imread("../cat/cat_3.jpg")
#將圖片轉化成灰度圖
img1 = cv2.imread("../cat/cat_3.jpg",cv2.IMREAD_GRAYSCALE)

(./:當前目錄;../:上級目錄,)

示例:

? ? ? ? 2、保存圖像

? ? ? ? ? ? ? ? cv2.imwrite(path, img)

cv2.imwrite('../data/f_cat_4.jpg',img)

(代碼解析將 img 圖片保存成指定的data目錄下的 f_cat_4.jpg )

? ? ? ? 3、創建黑白圖像

? ? ? ? ? ? ? ? 3.1 全黑圖像:

? ? ? ? ? ? ? ? ? ? ? ??使用np.zeros()創建全黑圖像

numpy.zeros((height,width,channels),dtype=np. uint8)

? ? ? ? ? ? ? ? 3.2 全白圖像:

np.full((h, w, c),fill_value,dtype = np.uint8)

? ? ? ? (fill_value == 255 時就是全白圖像)

????????拓展:也可以通過下面這種方法把全黑圖像轉換成全白圖像

black = np.zeros((360,480,3),dtype = np.uint8)
cv2.imshow('white',black)black[:,:,:] = 255
cv2.imshow('white1',black)black[:,:] = 255
cv2.imshow('white2',black)black[:] = 255
cv2.imshow('white3',black)

? ? ? ? 4、圖片裁切

? ? ? ? ? ? ? ?Opencv中, 圖像的裁切其實就是對圖像的數組形式進行切片,用于從圖像中提取一個? ? ? ? ? ? ? ? ? ?子區域(矩形區域)

(注意:先切高,后切寬)

img[y:y+h,x:x+w]的含義如下:x:子區域左上角的x坐標y:子區域左上角的y坐標w:子區域的寬度h:子區域的高度

????img[y:y+h,x:x+w]提取的是從(x,y)開始,高度為h,寬度為w的矩形區域?

? ? ? ? 5、圖像大小調整

? ? ? ? ? ? ? ? cv2.resize是Opencv庫中用于調整圖像大小的函數,在圖像處理中很常用,特別是在? ? ? ? ? ? ? ? ? ? ??要對圖像進行縮放以適應不同需求時

cv2.resize(img,dsize)
#img:輸入圖像,通常是二維或三位NumPy數組。
#dsize:輸出圖像的尺寸,是一個二元組`(w,h)`,

? ? ? ? 6、讀取視頻

? ? ? ? ? ? ? ? cap =?cv2.VideoCapture(path)

????????????????(path:?視頻流資源路徑,? 設置為 0 時代表從默認攝像頭捕獲視頻流 )

? ? ? ? ? ? ? ? ret,frame = cap.read()

? ? ? ? ? ? ? ? (返回值cap調用read()方法得到一個布爾值和一幀圖像,布爾值表示是否成功讀取到? ? ? ? ? ? ? ? ? ? ? ? ?幀,如果為False,可能是因為視頻結束或讀取失敗,如果為True,frame則是當前幀的? ? ? ? ? ? ? ? ? ?圖像數據 )

示例:(參考代碼)

四、圖像繪制

? ? ? ? 1、繪制直線

? ? ? ? ? ? ? ? cv2.line()

cv2.line(img,start,end,color,thickness)#img:要繪制直線的圖像#start、end:直線的起點和終點#color:直線的顏色(對于彩色圖像,使用 BGR 格式指定顏色)#thickness:線條寬度

示例:

? ? ? ? 2、繪制矩形?

? ? ? ? ? ? ? ? cv2.rectangle()

cv2.rectangle(img,leftupper,rightdown,color,thickness)#img:要繪制矩形的圖像#leftupper、rightdown:矩形的左上角和右下角坐標#color:線條的顏色#thickness:線條的寬度

?示例:

? ? ? ? ?3、繪制圓形

? ? ? ? ? ? ? ? cv2.circle()

cv2.circle(img,centerpoint,r,color,thickness)#img:要繪制圓形的圖片#centerpoint、r:圓心和半徑#color:線條顏色#tnickness:線條寬度,為-1時生成閉合圖案并填充顏色

示例:

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

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

相關文章

去中心化時代的通信革命:briefing與cpolar技術融合帶來的安全范式革新

文章目錄前言1.關于briefing2.本地部署briefing3.使用briefing4.cpolar內網穿透工具安裝5.創建遠程連接公網地址6.固定briefing公網地址前言 數字協作本該是提升效率的過程,卻被這些數據管理問題不斷困擾:平臺條款中的監控聲明、跨網絡環境的接入障礙、…

GitHub新手生存指南:AI項目版本控制與協作實戰

點擊 “AladdinEdu,同學們用得起的【H卡】算力平臺”,H卡級別算力,按量計費,靈活彈性,頂級配置,學生專屬優惠。 代碼倉庫創建 分支管理 PR提交 開源項目復現 讀者收獲:掌握團隊開發必備技能…

Axios封裝以及添加攔截器

在前端開發中,http請求層的封裝可以極大提升代碼的復用性和可維護性,本文將完整的用axios封裝接口請求,配置請求與響應攔截器,封裝統一的請求方法全過程。封裝的目的和思路在項目直接用axios發送請求當然沒問題,但是如…

C語言中奇技淫巧04-僅對指定函數啟用編譯優化

相信很多人使用GCC編譯代碼時,都會接觸到gcc -O0/1/2/3/s,知道它可以對工程進行全局優化。 事實上,除了全局優化外,使用GCC擴展方式,我們還可以僅對部分關鍵函數實施差異化編譯優化。 在GCC編譯器中,attrib…

HTML Style 對象深度解析:從基礎到高級應用

一、Style 對象的核心概念定義與作用 Style 對象是 HTML DOM 中用于操作元素內聯樣式的接口,通過 element.style 訪問。它允許動態修改元素的 CSS 屬性,但僅能直接影響內聯樣式(即通過 style 屬性直接寫在標簽中的樣式)。與外部樣…

【C++】定義常量

在 C 中&#xff0c;有兩種簡單的定義常量的方式&#xff1a; 使用 #define 預處理器。使用 const 關鍵字。 #define 預處理器 #include <iostream> using namespace std;#define LENGTH 10 #define WIDTH 5 #define NEWLINE \nint main() {int area; area LENGTH …

基于遺傳算法的多無人車協同偵察與安全保護策略優化

基于遺傳算法的多無人車協同偵察與安全保護策略優化 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家&#xff0c;覺得好請收藏。點擊跳轉到網站。 1. 引言 1.1 研究背景與意義 隨著無人系統技術的快速發…

python面向對象編程詳解

面向對象編程&#xff08;OOP&#xff09;是一種以對象為核心的編程范式。Python全面支持OOP&#xff0c;主要包含以下核心概念&#xff1a;一、類與對象1.類(Class)類是創建對象的模板或藍圖&#xff0c;它定義了對象的屬性和方法。class Dog:# 類屬性&#xff08;所有實例共享…

快速入門Socket編程——封裝一套便捷的Socket編程——導論

快速入門Socket編程——封裝一套便捷的Socket編程——導論 前言 ? 這里是筆者打算做的Socket編程的第二部分&#xff0c;也就是核心的討論我們Socket編程本身。 導論 ? 我們知道&#xff0c;一個經典的服務器套接字的處理流程是如下的&#xff1a; 創建一個指定傳輸層和網絡層…

【Mermaid 離線工具】Mermaid 流程圖生成器 - 高清PNG輸出,一鍵生成專業級流程圖!

文章目錄 Mermaid 流程圖生成器(離線版本):高效繪圖,離線也能玩轉專業可視化 一、Mermaid:文本繪圖的 “魔法語法” 二、離線版生成器:功能與優勢解析 (一)離線可用,場景更靈活 (二)操作流程:簡單五步,產出專業圖表 (三)界面設計:簡潔直觀,降低使用門檻 三、應…

haproxy原理及實戰部署

一、負載均衡 負載均衡是網絡架構和分布式系統中至關重要的技術&#xff0c;其核心作用是將大量的并發請求或數據流量合理分配到多個服務器&#xff08;或其他資源節點&#xff09;上&#xff0c;從而解決單節點壓力過大、資源利用率低、系統穩定性差等問題。 作用1. 提高系統吞…

jwt 在net9.0中做身份認證

一、新建net9.0項目WebApplication1&#xff0c;安裝包 <ItemGroup><PackageReference Include"Microsoft.AspNetCore.Authentication.JwtBearer" Version"9.0.7" /><PackageReference Include"Swashbuckle.AspNetCore" Version&…

【機器學習深度學習】微調能改變模型“智商”嗎?——模型能力與知識的本質解析

目錄 前言 一、模型的“知識”與“能力”&#xff1a;兩種不同的智能 第一種&#xff1a;淺層知識&#xff08;記憶 模式識別&#xff09; 第二種&#xff1a;深層能力&#xff08;推理 理解&#xff09; 二、微調&#xff1a;改變的是“經歷”&#xff0c;不是“天賦”…

oracle數據庫表空間碎片整理

oracle數據庫表空間碎片整理 表空間碎片情況檢查 表空間碎片問題處理 收縮表 表空間手動整理 exp/imp導出再導入 移動表到新的表空間 表空間碎片情況檢查 對比表實際使用空間和數據文件占用空間: --實際數據占用空間 select tablespace_name,round(sum(bytes/1024/1024/1024…

為什么需要可重入鎖

在黑馬點評項目實戰中&#xff0c;提到了可重入鎖&#xff0c;然后我想到了是不是不同業務在同一線程內反復獲取同一把鎖。本文來討論一下為什么鎖需要可重入。一、可重入鎖的核心&#xff1a;“同一線程多次獲取同一把鎖”??可重入&#xff08;Reentrant&#xff09;?? 的…

【AI】聯網模式

【AI】聯網模式 文章目錄【AI】聯網模式1. 簡介2. 接入步驟2.1 引入依賴2.2 方法構建2.3 接口構建1. 簡介 在使用聯網模式之前&#xff0c;我們如果問起ai一些最近網絡上流傳的一些東西&#xff0c;它可能并不能準確的給你描述出來&#xff0c;因為它的知識庫更新時間可能停留…

第10篇:實戰驗收篇

&#x1f50d; 實戰演練&#xff1a;多條件房源查詢 需求描述 查找一套符合以下條件的房子&#xff1a; 預算&#xff1a;2000–3000元區域&#xff1a;天河區戶型&#xff1a;兩房 關鍵詞&#xff1a;多條件查詢 AND BETWEEN LIKE 組合運用&#x1f3ac; 開場白“聽起來不難&a…

深入解析YARN中的FairScheduler與CapacityScheduler:資源分配策略的核心區別

YARN資源調度器概述在Hadoop生態系統中&#xff0c;YARN&#xff08;Yet Another Resource Negotiator&#xff09;作為核心資源管理平臺&#xff0c;其架構設計將計算資源管理與作業調度解耦&#xff0c;形成了"全局資源管理器&#xff08;ResourceManager&#xff09;節…

基于Seata的微服務分布式事務實戰經驗分享

基于Seata的微服務分布式事務實戰經驗分享 1. 業務場景描述 在電商系統中&#xff0c;用戶下單會涉及多個微服務&#xff1a;訂單服務&#xff08;Order Service&#xff09;、庫存服務&#xff08;Inventory Service&#xff09;、賬戶服務&#xff08;Account Service&#x…

Linux庫——庫的制作和原理(2)_庫的原理

文章目錄庫的原理理解目標文件ELF文件讀取ELF的工具——readelfELF從形成到加載的輪廓ELF形成可執行文件ELF可執行的加載理解鏈接與加載靜態鏈接ELF加載和進程地址空間虛擬地址 & 邏輯地址重新理解進程地址空間動態鏈接和動態庫的加載進程如何找到動態庫多個進程之間如何共…