day32 學習筆記

文章目錄

  • 前言
  • 一、霍夫變換
  • 二、標準霍夫變換
  • 三、統計概率霍夫變換
  • 四、霍夫圓變換


前言

  • 通過今天的學習,我掌握了霍夫變換的基本原本原理及其在OpenCV中的應用方法

一、霍夫變換

  • 霍夫變換是圖像處理中的常用技術,主要用于檢測圖像中的直線,圓等形狀;其主要思想是將圖像映射到霍夫空間中,在霍夫空間中尋找累計最大值來實現對某種特定形狀的檢測。
  • 在OpenCV中,霍夫變換常常用于對圖像邊緣檢測后得到的邊緣點進行篩選,得到符合條件的點并繪制成指定形狀
  • 霍夫變換的原理主要是:直角坐標系中的每一個點對應霍夫空間中的一條直線;同樣的,霍夫空間中的一條直線對應直角坐標系中的一個點。

以下兩幅圖像展示了兩個空間下的映射關系:
在這里插入圖片描述
在這里插入圖片描述

二、標準霍夫變換

  • 傳入邊緣檢測后的圖像進行標準霍夫變換,適用于檢測無限長直線且對計算效率要求不高時(如理論分析場景)。

  • lines=cv2.HoughLines(image, rho, theta, threshold)

  • image:輸入圖像,通常為二值圖像,其中白點表示邊緣點,黑點為背景。

  • rho:r的精度,以像素為單位,表示霍夫空間中每一步的距離增量, 值越大,考慮越多的線。

  • theta:角度θ的精度,通常以弧度為單位,表示霍夫空間中每一步的角度增量。值越小,考慮越多的線。

  • threshold:累加數閾值,只有累積投票數超過這個閾值的候選直線才會被返回。

返回值:cv2.HoughLines 函數返回一個二維數組,每一行代表一條直線在霍夫空間中的參數 (rho, theta)

# 讀取圖像
img = cv.imread(r"D:\AI\筆記課件\images\huofu.png")
# 灰度化
img_gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
# 邊緣檢測
res = cv.Canny(img,30,70)
# 標準霍夫變換
lines = cv.HoughLines(res,0.8,np.pi/180,90)
# 繪制直線
for i in line:rho,theta = i[0]sin_theta = np.sin(theta)cos_theta = np.cos(theta)x1,x2 = 0,img.shape[1]y1 = int((rho-x1*cos_theta)/(sin_theta))y2 = int((rho-x2*cos_theta)/(sin_theta))cv.line(img,(x1,y1),(x2,y2),(255,0,0),2,cv.LINE_AA)
# 顯示直線
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

三、統計概率霍夫變換

  • 統計概率霍夫直線變換(Probabilistic Hough Transform),是一種改進的霍夫變換,它在獲取到直線之后,會檢測原圖中在該直線上的點,并獲取到兩側的端點坐標,然后通過兩個點的坐標來計算該直線的長度,通過直線長度與最短長度閾值的比較來決定該直線要不要被保留。
  • 該方法適用于檢測實際線段、處理噪聲數據或要求實時性(如計算機視覺應用)。

lines=cv2.HoughLinesP(image, rho, theta, threshold, lines=None, minLineLength=0, maxLineGap=0)

  • image:輸入圖像,通常為二值圖像,其中白點表示邊緣點,黑點為背景。
  • rho:極徑分辨率,以像素為單位,表示極坐標系中的距離分辨率。
  • theta:極角分辨率,以弧度為單位,表示極坐標系中角度的分辨率。
  • threshold:閾值,用于過濾掉弱檢測結果,只有累計投票數超過這個閾值的直線才會被返回。
  • lines(可選):一個可初始化的輸出數組,用于存儲檢測到的直線參數。
  • minLineLength(可選):最短長度閾值,比這個長度短的線會被排除。
  • maxLineGap(可選):同一直線兩點之間的最大距離。當霍夫變換檢測到一系列接近直角的線段時,這些線段可能是同一直線的不同部分。maxLineGap參數指定了在考慮這些線段屬于同一直線時,它們之間最大可接受的像素間隔。

返回值lines:cv2.HoughLinesP 函數返回一個二維數組,每個元素是一個包含4個元素的數組,分別表示每條直線的起始點和結束點在圖像中的坐標(x1, y1, x2, y2)。

# 讀取圖像
img = cv.imread(r"D:\AI\筆記課件\images\huofu.png")
# 灰度化
img_gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
# 邊緣檢測
res = cv.Canny(img,30,70)
# 霍夫直線變換
lines = cv.HoughLinesP(res,0.8,np.pi/180,60,50,10)
# 繪制直線
for i in lines:x1,y1,x2,y2 = i[0]cv.line(img,(x1,y1),(x2,y2),(0,255,0),2,cv.LINE_AA)
# 顯示直線
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

四、霍夫圓變換

  • 霍夫圓變換跟直線變換類似,它可以從圖像中找出潛在的圓形結構,并返回它們的中心坐標和半徑。只不過線是用(r,θ)表示,圓是用(x_center,y_center,r)來表示,從二維變成了三維,數據量變大了很多;所以一般使用霍夫梯度法減少計算量。

circles=cv2.HoughCircles(image, method, dp, minDist, param1, param2)

  • image:輸入圖像,通常是灰度圖像。

  • method:使用的霍夫變換方法:霍夫梯度法,可以是 cv2.HOUGH_GRADIENT,這是唯一在OpenCV中用于圓檢測的方法。

  • dp:累加器分辨率與輸入圖像分辨率之間的降采樣比率,用于加速運算但不影響準確性。

  • minDist:檢測到的圓心之間的最小允許距離,以像素為單位。

# 讀取圖像
img = cv.imread(r"D:\AI\筆記課件\images\huofu.png")
# 灰度化
img_gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
# 邊緣檢測
res = cv.Canny(img,30,70)
# 霍夫圓變換
circles = cv.HoughCircles(res,cv.HOUGH_GRADIENT,1,20,param2=30)
# 數據類型轉換
circles = np.int_(np.around(circles))
# 繪制圖像
for i in circles:x,y,r = i[0]cv.circle(img,(x,y),r,(255,0,0),2,cv.LINE_AA)
# 顯示圖像
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

THE END

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

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

相關文章

圖解YOLO(You Only Look Once)目標檢測(v1-v5)

1. YOLO系列整體介紹 YOLO屬于深度學習經典檢測方法中的單階段(one - stage)類型,與兩階段(two - stage,如Faster - rcnn、Mask - Rcnn系列)方法相對。 不同模型性能 單階段方法的最核心優勢是速度非常快…

C# 類型、存儲和變量(靜態類型和dynamic關鍵字、可空類型)

本章內容 C#程序是一組類型聲明 類型是一種模板 實例化類型 數據成員和函數成員 預定義類型 用戶定義類型 棧和堆 值類型和引用類型 變量 靜態類型和dynamic關鍵字 可空類型 靜態類型和dynamic關鍵字 你可能巳經注意到了,每一個變量都包括變量類型。這樣編譯器就可…

信奧賽之c++基礎(初識循環嵌套與ASCII密碼本)

?? 游樂園編程奇遇記——循環嵌套與ASCII密碼本 ?? 第一章:摩天輪與旋轉木馬——循環嵌套 ?? 游樂場里的雙重循環 for(int 排數=1; 排數<=3; 排數++){// 外層循環像摩天輪for(int 座位=1; 座位<=5; 座位++){// 內層循環像旋轉木馬cout << "??"…

Spine 動畫教程:皮膚制作

一、前言 擱了很久的抖音直播小玩法開發&#xff0c;最近又讓我想起來了。由于是初次嘗試&#xff0c;所以我將開發費用的預算降到為零。不但不買服務器采用 UnitySDK 的指令直推&#xff0c;而且游戲的資產也用 AI 生成&#xff0c;主打省時又省錢。 但是圖片有了&#xff0…

論文閱讀筆記——π0.5: a Vision-Language-Action Model with Open-World Generalization

π0.5 論文 通過異構數據協同訓練與分層推理&#xff0c;用中等規模的目標數據&#xff08;400小時&#xff09;實現了大規模泛化能力&#xff0c;為現實世界機器人學習提供了新范式。 高層推理(high-level) 根據當前觀測和任務指令預測子任務&#xff08;如“打開抽屜”&…

記錄搭建自己應用中心

記錄搭建自己應用中心 應用架構主應用-管理中心系統文件系統子應用 日志系統日志系統前端日志系統后端 用戶系統接入使用暫未完成 研發管理需求面板消息推送任務分配應用發布 應用架構 一直想做個試試&#xff0c;這是一個簡易版的&#xff0c;主要是整合下知識的&#xff0c;…

【網工第6版】第5章 網絡互聯⑦

目錄 ▲ 路由協議OSPF ◎ OSPF簡介 ◎ OSPF特點 本章重要程度&#xff1a;☆☆☆☆☆ ▲ 路由協議OSPF ◎ OSPF簡介 OSPF(Open Shortest Path First,開放式最短路徑優先協議)是目前應用最廣泛的路由協議。 OSPF是一種內部網關協議IGP&#xff0c;也是鏈路狀態路由協議&am…

5.3 Dify:低代碼平臺,適用于企業快速部署合規AI應用

Dify作為一款開源低代碼平臺&#xff0c;已成為企業快速構建和部署合規AI應用的首選工具。Dify通過整合后端即服務&#xff08;Backend-as-a-Service, BaaS&#xff09;、大型語言模型操作&#xff08;LLMOps&#xff09;以及直觀的視覺化界面&#xff0c;顯著降低了AI應用開發…

AI 編程工具:Augment Code

Meet Augment Agent: Your AI pair programmer that deeply understands your codebase, and learns as you work Augment 是開發人員AI平臺&#xff0c;它可以幫助您理解代碼、調試問題&#xff0c;并更快地發布&#xff0c;因為它了解您的代碼庫。使用聊天、Next Edit和Augme…

vc++ 如何調用poco庫

1. 下載并安裝 Poco 庫 你可以從 Poco 的官方網站&#xff08;POCO C Libraries - Simplify C Development &#xff09;下載其源代碼壓縮包。下載完成后&#xff0c;按照下面的步驟進行編譯和安裝&#xff1a; 解壓源代碼&#xff1a;把下載的壓縮包解壓到指定目錄。配置編譯…

淺談OpenAIClaude LLM Tools的額外配置

前言 https://platform.openai.com/docs/guides/function-calling?api-modechat&strict-modedisabled#additional-configurationshttps://docs.anthropic.com/en/docs/build-with-claude/tool-use/overview#forcing-tool-use tool_choice “none” 就是不用tools&#x…

SystemWeaver詳解:從入門到精通的深度實戰指南

SystemWeaver詳解&#xff1a;從入門到精通的深度實戰指南 文章目錄 SystemWeaver詳解&#xff1a;從入門到精通的深度實戰指南一、SystemWeaver環境搭建與基礎配置1.1 多平臺安裝全流程 二、新手必學的十大核心操作2.1 項目創建全流程2.2 建模工具箱深度解析 三、需求工程與系…

力扣DAY68 | 熱100 | 尋找兩個正序數組的中位數

前言 困難 ○ 這題搞了3天實在太難了&#xff0c;本質就是每次排除k/2個數&#xff0c;直到找到第k個數。 題目 給定兩個大小分別為 m 和 n 的正序&#xff08;從小到大&#xff09;數組 nums1 和 nums2。請你找出并返回這兩個正序數組的 中位數 。 算法的時間復雜度應該為…

Linux常見故障:排查思路與錯誤分析指南

引言 當Linux系統"生病"時&#xff0c;它不會說話但卻會通過各種癥狀"求救"&#x1f198;&#xff01;本文將帶你建立系統化的故障排查思維&#xff0c;從磁盤到內存&#xff0c;從網絡到服務&#xff0c;全方位掌握Linux系統的"把脈問診"技巧。…

深度解析:從12306看混合云架構下的高并發系統設計

作為曾參與12306余票查詢系統高并發升級的技術從業者&#xff0c;筆者注意到公眾對于12306底層技術常存在認知盲區。為破解這一迷思&#xff0c;特此分享十年前的架構解密文獻&#xff08;該技術之前名叫 gemfire 現已晉升為Apache頂級項目Geode&#xff0c;代碼庫詳見&#xf…

華為Pura X的智控鍵:讓折疊機體驗更上一層樓的設計

還記得Mate 70系列剛出那會&#xff0c;我體驗了下智控鍵&#xff0c;那時候就覺得這個“把快捷方式做進電源鍵”的交互方式非常驚艷&#xff0c;沒想到在Pura X上&#xff0c;這種便捷體驗感更上了一層樓。 智控鍵&#xff1a;折疊屏手機的天選快捷方式&#xff1f; 傳統折疊…

springboot如何管理多數據源?

靜態多數據源管理 配置多個數據源 :創建多個數據源的配置類,通常使用 @ConfigurationProperties 注解來綁定配置文件中的數據源屬性,并通過 @Bean 注解定義多個 DataSource Bean 。例如: 配置類: @Configuration public class DataSourceConfig {@Bean(name = "prima…

谷歌終止新冠疫情時期結構化數據支持:SEO影響與應對策略

2025年4月&#xff0c;谷歌悄然宣布將于7月31日起停止支持新冠疫情時期的“特殊公告”&#xff08;SpecialAnnouncement&#xff09;結構化數據。這一舉措標志著谷歌正式結束一項在疫情期間推出的實驗性功能&#xff0c;對依賴該結構化數據的網站管理員和SEO從業者來說&#xf…

常見游戲引擎介紹與對比

Unreal Engine (UE4/UE5) 主語言&#xff1a;C Unreal Engine 主要使用 C 作為開發語言。C 提供了高性能的底層控制&#xff0c;適用于需要精細調優的 AAA 級游戲。C 在 Unreal 中用于開發核心游戲邏輯、物理引擎等性能要求較高的部分。 腳本語言&#xff1a;藍圖&#xff08;B…

【C++】繼承----下篇

文章目錄 前言一、實現一個不能繼承的類二、友元與繼承三、繼承與靜態成員四、多繼承以及菱形繼承問題1.繼承模型&#xff1a;2.菱形繼承的問題3.虛擬繼承解決數據冗余和二義性的原理4.虛擬繼承的原理 五、繼承的總結和反思1.繼承和組合 總結 前言 各位好呀!今天呢我們接著講繼…