Opencvsharp中關於霍夫變換直線檢測的使用

2021-09-24 05:49:38 字數 2819 閱讀 8749

在opencvsharp中很多api的寫法跟c++中有所不同不同,比如在霍夫直線檢測cv2.houghlinesp這個api中返回的是乙個linesegmentpoint,而非乙個vec4i的陣列;

所以首先建立乙個linesegmentpoint型別的陣列作為接收,再呼叫cv2.houghlinesp這個函式

houghlines(inputarrayimage, doublerho, doubletheta, intthreshold, doublesrn= 0, doublestn= 0);

rho: 線段以畫素為單位的距離精度,double型別的,推薦用1.0

threshod: 累加平面的閾值引數,int型別,超過設定閾值才被檢測出線段,值越大,基本上意味著檢出的線段越長,檢出的線段個數越少。

srn:線段以畫素為單位的最小長度

stn:同一方向上兩條線段判定為一條線段的最大允許間隔(斷裂),超過了設定值,則把兩條線段當成一條線段,值越大,允許線段上的斷裂越大,越有可能檢出潛在的直線段

linesegmentpoint linesegmentpoint;  //建立接收陣列

linesegmentpoint = cv2.houghlinesp(gray, 1.0, cv2.pi/180,200,100,300);//進行霍夫變換直線檢測

在陣列linesegmentpoint中可以列印下可以看到每個陣列的元素其實是包含線段的兩個端點,這樣就可以畫出直線

for (int i = 0; i < linesegmentpoint.length; i++)

列印結果:

(x:35 y:126)

(x:54 y:483)

(x:37 y:124)

(x:298 y:128)

(x:611 y:429)

(x:616 y:137)

(x:72 y:483)

(x:612 y:427)

(x:403 y:129)

(x:610 y:129)

接下來再將陣列中的所有元素繪製成線段就可以看到結果:

cv2.cvtcolor(gray, gray, colorconversioncodes.gray2bgr);

for (int i = 0; i < linesegmentpoint.length; i++)

下面是乙個例項:

mat src = new mat(@"d:\baidunetdiskdownload\電視.jpg", imreadmodes.color);

cv2.pyrdown(src, src);

cv2.resize(src, src, new size(src.width / 3, src.height / 3));//or

src, new size(0, 0), 1.0f / 3.0f, 1.0f / 3.0f);

cv2.imshow("src", src);

mat gray = new mat();

cv2.cvtcolor(src, gray, colorconversioncodes.bgr2gray);

cv2.threshold(gray, gray, 100, 255, thresholdtypes.binary);//二值化

mat stelem = cv2.getstructuringelement(morphshapes.rect, new size(7, 7));

cv2.morphologyex(gray, gray, morphtypes.open, stelem, new point(-1, -1), 3);//來三次次開操作把無關點濾掉

cv2.morphologyex(gray, gray, morphtypes.dilate, stelem);//膨脹擴大下範圍

cv2.imshow("binary", gray);

cv2.canny(gray, gray, 20, 50,3);

gray, colorconversioncodes.gray2bgr);

linesegmentpoint linesegmentpoint;

linesegmentpoint = cv2.houghlinesp(gray, 1.0, cv2.pi/180,200,100,300);

for (int i = 0; i < linesegmentpoint.length; i++)

cv2.cvtcolor(gray, gray, colorconversioncodes.gray2bgr);

for (int i = 0; i < linesegmentpoint.length; i++)

cv2.imshow("dst", gray);

cv2.waitkey();

顯示結果:

C 中OpenCVSharp實現輪廓檢測

opencv提供了函式 findcontours 用於對物體輪廓進行檢測,該函式實現演算法是由s.suzuki k.abe於1985年發表的。opencvsharp封裝了這個函式,有2個引數 contours,hierarchy 要做特別的說明。public static void findcont...

python中關於Opencv中關於矩形的函式總結

最近處理影象,以前用的都是matlab,現在入手python比較慢,這幾天看到了很多命名和功能相似的函式,作個記錄總結一下 只是為了能夠看下函式知道它是做什麼的,因此不會對其用法說得面面俱到。看到乙個文章講得清晰詳實,分享一下 功能 計算輪廓內的面積 示例 輸入為乙個點集 contours 0 為前...

js中關於時間

1 獲取當前時間 var mydate new date mydate.getyear 獲取當前年份 2位 mydate.getfullyear 獲取完整的年份 4位,1970 mydate.getmonth 獲取當前月份 0 11,0代表1月 mydate.getdate 獲取當前日 1 31 m...