霍夫線變換可以在灰度圖中找到線段
函式原型:
cvapi(cvseq*) cvhoughlines2( cvarr* image, void* line_storage, int method,
double rho, double theta, int threshold,
double param1 cv_default(0), double param2 cv_default(0));
image,影象(必須是8位的)
line_storage,記憶體塊
method,選擇sht(標準霍夫變換)或者ppht(累計概率霍夫變換)
rho,解析度(單位:畫素)
theta,解析度(單位:弧度)
threshold,認定為一條直線時在累計平面中必須達到的值
ppht才用到param1和param2兩個引數
param1,將要返回直線的最小長度
param2,設定為一條直線上分離線段不能練成一條直線的分隔畫素點數
思路:1.先將3通道的bgr彩圖模糊化,次數根據實際需要而定
2.將模糊所得的圖轉為單通道灰度圖
3.用cvcanny函式把邊界提取出來
4.用cvhoughlines2函式提取直線
5.畫出提取出來的直線
測試用圖:
程式**:
#include #include#include using namespace std;
int main()
cvnamedwindow("img_out",cv_window_autosize);
cvshowimage("img_out",img_out);
cvwaitkey(0);
cvdestroyallwindows();
cvreleaseimage(&img_in);
cvreleaseimage(&img_temp);
cvreleaseimage(&img_canny);
cvreleaseimage(&img_out);
return 0;
}
執行結果: 缺點 霍夫圓 霍夫變換
霍夫變換是一種特徵提取,被廣泛應用在影象分析 電腦視覺以及數字影像處理。霍夫變換是用來辨別找出物件中的特徵,例如 線條。他的演算法流程大致如下,給定乙個物件 要辨別的形狀的種類,演算法會在引數空間中執行投票來決定物體的形狀,而這是由累加空間 accumulator space 裡的區域性最大值來決定...
霍夫檢測圓 霍夫梯度法
承接上篇博文,在基本搞懂霍夫檢測直線是怎麼進化到檢測圓後,開始 痴心妄想 自己寫 了!雖說最後的效果不是很好,但是重要的是在碼 過程中發現和解決的一些問題 不一定有共性,但兄弟萌可以避免下這些bug 上篇博文已經闡述了我們是如何從三維計數 轉到霍夫梯度法的,該演算法主要分為兩步,先找圓心疑似點,再對...
缺點 霍夫圓 霍夫圓變換
對於直線來說,一條直線能有引數極徑級角表示,而對圓來說我們需要三個引數來表示乙個圓 在opencv中,我們常常通過乙個叫 霍夫梯度法 的方法來解決圓變換的問題。霍夫梯度法的原理 1 首先對影象應用邊緣檢測,比如canny邊緣檢測 2 然後對邊緣影象中的每乙個非零點,考慮其區域性梯度,即用sobel函...