本節主要介紹如何用hough變換檢測直線和圓
一:hough變換檢測直線
<1>
原始hough變換
思想:先求出影象中每點的極座標方程
<
如下,相交於一點的極座標曲線的個數大於最小投票數,則將該點所對應的
(p, r0)
放入vector
中,即得到一條直線,
lines
中儲存的是極座標方程的引數 注意
hough
變換要求輸入的是包含一組點的二值影象。
**:
canny(image, result, 150, 220);
vectorlines;
houghlines(result, lines, 1, pi/180, 120);
for(size_t i = 0; i < lines.size(); i++)
其中1
和pi/180
是直線搜尋是的步進尺寸。
結果:canny後得結果:
hough變換後:
概念hough變換
思想:不是系統的進行掃瞄影象,而是隨機挑選畫素點,一旦累加器中某一項達到給定的最小值,那麼掃瞄沿著對應直線的畫素並移除所有經過的畫素點。得到的可以說是一條線段
獲得一條直線
即將(x0, y0, x1, y1)
放入vector中
**:
vectorlines;
houghlinesp(result, lines, 1, pi/180, 50, 50, 120);
for(size_t i = 0; i < lines.size(); i++)
結果:
變換檢測圓
事實上,任何可以用引數方程表示的幾何體都可嘗試用
hough
變換進行檢測。檢測圓整合了
canny
檢測和hough
變換。
注意在hough
圓變換前對影象進行平滑,這樣可以減少可能引起誤檢測的影象噪點。
**:
gaussianblur(image, result, size(5, 5), 1.5);
vectorcircles;
houghcircles(result, circles, cv_hough_gradient,
2, // 累加器的解析度
50, // 兩個圓之間的最小距離
200, // canny 高閥值
100, // 最小投票數
25, 100);
for(vector::const_iterator itc = circles.begin(); itc != circles.end(); ++itc)
結果:
Opencv2系列學習筆記12 檢測fast特徵
一 fast特徵定義什麼是角點 這次的定義基於假定特徵點周圍的影象強度,通過檢查候選畫素周圍一圈畫素來決定是否接受乙個特徵點。與中心點差異較大的畫素如果組成連續的圓弧,並且弧長大於原周長的 3 4,那麼我們認為找到了乙個特徵點。二 加速技巧 首先測試圓上被90度分割的四個點 頂部,底部,左側及右側 ...
opencv系列學習 2
傅利葉變換會將影象分解成其正弦和余弦分量。換句話說,它將影象從空間域轉換到頻率域。這個想法是,任何函式都可以用無限的正弦和余弦函式之和精確地近似。傅利葉變換是一種方法。數學上,二維影象的傅利葉變換為 include opencv2 core.hpp include opencv2 imgproc.h...
opencv2 問題複習 第11天
之前一直有個問題都沒有解決今天又遇到這個問題 簡單來說就是如何把數字加到字串的後面之前做視音訊處理的時候就是搞不定現在出來了,其實是這麼的簡單 string a 3 for int i 0 i 3 i else int main kernel size 3 2 ind 5 kernel mat on...