【Opencv+Yolo】Day2_圖像處理

目錄

一、圖像梯度計算

圖像梯度-sobal算子:

Scharr:權重變化更大(線條更加豐富,比Sobel更加細致捕捉更多梯度信息)

Laplacian算子:對噪音點敏感(可以和其他一起結合使用)

二、邊緣檢測:

Canny邊緣檢測:

?編輯

?三、圖像金字塔:

高斯金字塔:

?拉普拉斯金字塔

四、圖像輪廓:?

cv2.findContours(img, mode, method)


一、圖像梯度計算

圖像梯度-sobal算子:

為什么兩邊??2? ——因為我們關注的就是P5左右兩邊的梯度差,p6p4離得近,權重大

Gx右-左
Gy下-上

dst2 = cv2.Sobel(src,ddepth,dx,dy,ksize)

-ddepth:圖像的深度

-dx和dy:水平豎直方向

-kszie:是Sobel算子的大小

-不建議dxdy直接設置1,1;分開計算求和效果好

pie= cv2.imread('pie.png')
#結果有正負,只關系差異,正負取絕對值,現在看水平的,顯示有梯度的地方,邊界部分
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,kszie=3)
cv_show(sobelx,'sobelx')
#白->黑是正數;黑->白是負數,所有負數截斷為0,所以要取絕對值
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,kszie=3)
sobelx = cv2.convertScaleAbs(sobelx)
cv_show(sobelx,'sobelx')
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,kszie=3)
sobely = cv2.convertScaleAbs(sobely)
cv_show(sobely,'sobely')
#xy求和
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5)
cv_show(sobelxy,'sobelxy')

Scharr:權重變化更大(線條更加豐富,比Sobel更加細致捕捉更多梯度信息)

scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)
scharry = cv2.Scharr(img,cv2.CV_64F,0,1)
scharrx = cv2.convertScaleAbs(scharrx)
scharry = cv2.convertScaleAbs(scharry)
scharrxy = cv2.addWeighted(scharrx,0.5,scharry,0.5)

Laplacian算子:對噪音點敏感(可以和其他一起結合使用)

laplacian = cv2.Laplacian(img,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)

二、邊緣檢測:

Canny邊緣檢測:

1)使用高斯濾波器,以平滑圖像,濾除噪聲。(中間點比較大)

2)計算圖像中每個像素點的梯度強度和方向。

3)應用非極大值抑制(NMSNon-Maximum Suppression),抑制以消除邊緣檢測帶來的雜散響應。(體現最明顯的)

A方法:c,g1,g2,g3,g4,想求兩個交點梯度,用線性插值法用權重;如果C比兩個交點梯度都大,才保留下來

B方法:

A與BC比較,A>BC,保存邊界

4)應用雙閾值(Double-Threshold)檢測來確定真實的和潛在的邊緣,只保留最真實的。

C與A邊界連接,暫且保留;B不與邊界連接,不保留

5)通過抑制孤立的弱邊緣最終完成邊緣檢測

img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
#參數是minmaxvalue
v1 = cv2.Canny(img,80,150)#比較大,邊緣信息較小
v2 = cv2.Canny(img,50,100)#比較小,邊緣信息更多,有可能有噪音
res = np.hstack((v1,v2))
cv_show(res,'res')


?三、圖像金字塔:

高斯金字塔:

向下采樣(縮小)(往塔尖)

向上采樣(放大)(往塔底)

img = cv2.imread('AM.PNG')
cv_show(img,'img')
print(img.shape)
#放大
up = cv2.pyrUp(img)
cv_show(up,'up')
print(up.shape)
#變小
down = cv2.pyrDown(img)
cv_show(down,'down')
print(down.shape)

?拉普拉斯金字塔

#第一層
down = cv2.pyrDown(img)
down_up = cv2.pyrUp(down)
l=img-down_up
cv_show(l,'l')

四、圖像輪廓:?

背景:之前的邊緣可能包含一些線段,不能叫做輪廓,得是一個整體,才能是輪廓

cv2.findContours(img, mode, method)

mode: 輪廓檢索模式

  • RETR_EXTERNAL:只檢測最外層的輪廓;

  • RETR_LIST:檢測所有輪廓,并將它們保存到同一層級中;

  • RETR_CCOMP:檢測所有輪廓,并將它們組織為兩層:頂層是外部邊界,第二層是空洞邊界;

  • RETR_TREE:檢測所有輪廓,并建立一個完整的輪廓層級結構(樹形層次)--常用

method: 輪廓逼近方法

  • CHAIN_APPROX_NONE:保留所有的輪廓點(不做壓縮),輸出完整多邊形的頂點序列;

  • CHAIN_APPROX_SIMPLE:壓縮水平、垂直和對角線方向上的冗余點,僅保留端點;(邊緣簡單化,進行壓縮得到精簡結果)

  1. 為了準確性,使用二值圖像:
  2. 傳入二值,檢測輪廓
  3. 繪畫輪廓
img = cv2.imread('img.png')
gary = cv2.cvtColor(img,cv2.COLOR_BGRGRAY)
#二值處理,小的是0白,大的255黑
ret,thresh = cv2.threshhold(gray,127,255,cv2.THRESH_BINARY)
cv_show(thresh,'thresh')
#檢測函數,傳入二值圖像,檢測所有輪廓
#第一個值,二值結果
#第二個值:輪廓信息
#第三個值:層級
binary,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
#繪制輪廓,需要copy,不然會覆蓋
draw_img = img.copy()
#第三個參數,輪廓畫第幾個,-1是所有
#倒數第二個參數BGR格式
#2:線條寬度
res = cv2.drawContours(draw_img,contours,-1,(0,0,255),2)
cv_show(res,'res')

輪廓特征

#需要先取出輪廓
cnt = contours[0]
#面積
cv2.contourArea(cnt)
#周長
cv2.arcLength(cnt,True)

輪廓近似:

img = cv2.imread('img.png')
gary = cv2.cvtColor(img,cv2.COLOR_BGRGRAY)
#二值處理,小的是0白,大的255黑
ret,thresh = cv2.threshhold(gray,127,255,cv2.THRESH_BINARY)
cv_show(thresh,'thresh')
binary,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
cnt = contours[0]
draw_img = img.copy()
res = cv2.drawContours(draw_img,contours,-1,(0,0,255),2)
cv_show(res,'res')
#周長*0.1,值越小和輪廓越貼合,越大遠離輪廓
epsilon = 0.1*cv2.arcLength(cnt,True)
#周長做閾值
approx = cv2.approxPolyDP(cnt,epsilon,True)
draw_img = img.copy()
res = cv2.drawContours(draw_img,contours,-1,(0,0,255),2)
cv_show(res,'res')

邊界矩形:

img = cv2.imread('img.png')
gary = cv2.cvtColor(img,cv2.COLOR_BGRGRAY)
ret,thresh = cv2.threshhold(gray,127,255,cv2.THRESH_BINARY)
cv_show(thresh,'thresh')
binary,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
cnt = contours[0]
x,y,w,h = cv2.boundingRect(cnt)
#外接矩形面積
rect_area = w*h
#輪廓與邊界矩形面積比
extent = float(area)/rect_area

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

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

相關文章

STM32通過rt_hw_hard_fault_exception中的LR寄存器追溯程序問題?

1. 問題現象 程序運行導致rt_hw_hard_fault_exception 如圖 顯示錯誤相關代碼 struct exception_stack_frame {uint32_t r0;uint32_t r1;uint32_t r2;uint32_t r3;uint32_t r12; uint32_t lr; // 鏈接寄存器 (LR)uint32_t pc; // 程序計數器 (PC)uint32_t psr; // 程序狀態…

Mac安裝配置InfluxDB,InfluxDB快速入門,Java集成InfluxDB

1. 與MySQL的比較 InfluxDBMySQL解釋BucketDatabase數據庫MeasurementTable表TagIndexed Column索引列FieldColumn普通列PointRow每行數據 2. 安裝FluxDB brew update默認安裝 2.x的版本 brew install influxdb查看influxdb版本 influxd version # InfluxDB 2.7.11 (git: …

【spring】spring中的retry重試機制; resilience4j熔斷限流教程;springboot整合retry+resilience4j教程

在調用三方接口時,我們一般要考慮接口調用失敗的處理,可以通過spring提供的retry來實現;如果重試幾次都失敗了,可能就要考慮降級補償了; 有時我們也可能要考慮熔斷,在微服務中可能會使用sentinel來做熔斷&a…

(21)量子計算對密碼學的影響

文章目錄 2??1?? 量子計算對密碼學的影響 🌌🔍 TL;DR🚀 量子計算:密碼學的終結者?? 量子計算的破壞力 🔐 Java密碼學體系面臨的量子威脅🔥 受影響最嚴重的Java安全組件 🛡? 后…

經營分析會,財務該怎么做?

目錄 一、業績洞察:從「現象描述」到「因果分析」 1.分層拆解 2.關聯驗證 3.根因追溯 二、預算管理:從「剛性控制」到「動態平衡」 1.分類管控 2.滾動校準 3.價值評估 三、客戶與市場:從「交易記錄」到「價值評估」 1.價值分層 2.…

進階智能體實戰九、圖文需求分析助手(ChatGpt多模態版)(幫你生成 模塊劃分+頁面+表設計、狀態機、工作流、ER模型)

?? 基于 ChatGPT 多模態大模型的需求文檔分析助手 本文將介紹如何利用 OpenAI 的 GPT-4o 多模態能力,構建一個智能的需求文檔分析助手,自動提取功能模塊、菜單設計、字段設計、狀態機、流程圖和 ER 模型等關鍵內容。 一、?? 環境準備 在開始之前,請確保您已經完成了基礎…

圖書管理系統的設計與實現

湖南軟件職業技術大學 本科畢業設計(論文) 設計(論文)題目 圖書管理系統的設計與實現 學生姓名 學生學號 所在學院 專業班級 畢業設計(論文)真實性承諾及聲明 學生對畢業設計(論文)真實性承諾 本人鄭重聲明:所提交的畢業設計(論文)作品是本人在指導教師的指導下,獨…

直線模組在手術機器人中有哪些技術挑戰?

手術機器人在現代醫療領域發揮著越來越重要的作用,直線模組作為其關鍵部件,對手術機器人的性能有著至關重要的影響。然而,在手術機器人中使用直線模組面臨著諸多技術挑戰,具體如下: 1、?高精度要求?:手術…

技術-工程-管用養修保-智能硬件-智能軟件五維黃金序位模型

融智學工程技術體系:五維協同架構 基于鄒曉輝教授的框架,工程技術體系重構為:技術-工程-管用養修保-智能硬件-智能軟件五維黃金序位模型: math \mathbb{E}_{\text{技}} \underbrace{\prod_{\text{Dis}} \text{TechnoCore}}_{\…

InnoDB引擎邏輯存儲結構及架構

簡化理解版 想象 InnoDB 是一個高效運轉的倉庫: 核心內存區 (大腦 & 高速緩存 - 干活超快的地方) 緩沖池 Buffer Pool (最最核心!): 作用: 相當于倉庫的“高頻貨架”。把最常用的數據(表數據、索引)從…

貧血模型與充血模型:架構設計的分水嶺

在企業級應用的架構設計中,貧血模型和充血模型一直是架構師們爭論的熱點話題。兩者背后分別代表著“事務腳本模式”和“領域模型模式”兩種截然不同的設計思想。而理解這兩者的差異,有助于開發者根據實際業務場景做出更合理的架構決策。 貧血模型&#…

Linux的調試器--gbd/cgbd

1.引入 #include <stdio.h> int Sum(int s, int e) {int result 0;for(int i s; i < e; i){result i;}return result; } int main() {int start 1;int end 100;printf("I will begin\n");int n Sum(start, end);printf("running done, result i…

PPIO × AstrBot:多平臺接入聊天機器人,開啟高效協同 | 教程

在消息平臺接入專屬聊天機器人&#xff0c;能快速生成精準答案&#xff0c;與項目管理、CRM等系統集成后&#xff0c;機器人還能根據任務進展自動建群、推送進度提醒&#xff0c;并精準相關人員&#xff0c;實現信息的高效傳遞。 AstrBot 是一個多平臺聊天機器人及開發框架&…

HAProxy 可觀測性最佳實踐

HAProxy 簡介 HAProxy&#xff08;High Availability Proxy&#xff09;是一款廣泛使用的高性能負載均衡器&#xff0c;支持 TCP 和 HTTP 協議&#xff0c;提供高可用性、負載均衡和代理服務。它特別適用于負載較大的 Web 站點&#xff0c;能夠支持數以萬計的并發連接&#xf…

增強LangChain交互體驗:消息歷史(記憶)功能詳解

背景 在構建聊天機器人時,將對話狀態傳入和傳出鏈至關重要。 LangGraph 實現了內置的持久層,允許鏈狀態自動持久化在內存或外部后端(如 SQLite、Postgres 或 Redis)中。在本文我們將演示如何通過將任意 LangChain runnables 包裝在最小的 LangGraph 應用程序中來添加持久性…

EasyRTC音視頻實時通話助力微信小程序:打造低延遲、高可靠的VoIP端到端呼叫解決方案

一、方案概述? 在數字化通信浪潮下&#xff0c;端到端實時音視頻能力成為剛需。依托龐大用戶生態的微信小程序&#xff0c;是實現此類功能的優質載體。基于WebRTC的EasyRTC音視頻SDK&#xff0c;為小程序VoIP呼叫提供輕量化解決方案&#xff0c;通過技術優化實現低延遲通信&a…

WebVm:無需安裝,一款可以在瀏覽器運行的 Linux 來了

WebVM 是一款可以在瀏覽器中運行的Linux虛擬機。不是那種HTMLJavaScript模擬的UI&#xff0c;完全通過HTML5/WebAssembly技術實現客戶端運行。通過集成CheerpX虛擬化引擎&#xff0c;可直接在瀏覽器中運行未經修改的Debian系統。 Stars 數13054Forks 數2398 主要特點 完整 Lin…

CesiumInstancedMesh 實例

CesiumInstancedMesh 實例 import * as Cesium from cesium;// Three.js 風格的 InstancedMesh 類, https://threejs.org/docs/#api/en/objects/InstancedMesh export class CesiumInstancedMesh {/*** Creates an instance of InstancedMesh.** param {Cesium.Geometry} geom…

創建型模式之Abstract Factory(抽象工廠)

創建型模式之Abstract Factory&#xff08;抽象工廠&#xff09; 摘要&#xff1a; 本文介紹了抽象工廠模式&#xff08;Abstract Factory&#xff09;&#xff0c;它是一種創建型設計模式&#xff0c;提供了一種創建一系列相關對象的接口而無需指定具體類。文章通過手機工廠示…

多卡訓練核心技術詳解

多卡訓練核心技術詳解 多卡訓練 主要圍繞分布式環境初始化、模型并行化、數據分片和梯度同步展開。下面結合您的代碼,詳細解釋這些核心部分: 并行執行命令 torchrun --nproc_per_node=5 TokenLossMulCard.py 1. 分布式環境初始化 def init_distributed():init_process_…