(30)點多邊形測試

2021-08-21 13:30:16 字數 1376 閱讀 5505

/*

*點多邊形測試

* 概念介紹

測試乙個點是否在給定的多邊形內部,邊緣或者外部

*api介紹 cv::pointpolygontest

pointpolygontest(

inputarray contour,// 輸入的輪廓,乙個輪廓乙個輪廓的做

point2f pt, // 測試點 測試的畫素點的位置

bool measuredist // 是否測量真實的值,如果不測量真實的值它可能就不返回距離值,如果測的話它就返回乙個距離值

//是否返回距離值,如果是false,它就返回3個flag,1表示在內面,0表示在邊界上,-1表示在外部,true返回實際距離

)返回資料是double型別

前提是輪廓,二值化啊canny啊...獲取輪廓

*步驟 3:發現輪廓

4:對影象中所有畫素點做點 多邊形測試,得到距離,對距離做歸一化後顯示。發現最大最小值才好做歸一化

*/#include #include using namespace std;

using namespace cv;

int main()

//findcontours

vector> contours;

vectorhierachy;

mat csrc;

src.copyto(csrc);

//測試是在輪廓裡面還是在輪廓外面

mat raw_dist = mat::zeros(csrc.size(), cv_32fc1); //測試要生成一張圖,一張距離的圖

for (int row = 0; row < raw_dist.rows; row++) //對每乙個畫素做點多邊形測試

} //這樣就得到了每乙個點跟多邊形的距離

//尋找最大最小值

double minvalue, maxvalue;

minmaxloc(raw_dist, &minvalue, &maxvalue, 0, 0, mat()); //一張影象最大最小值的位置在哪

//根據最大最小值把畫素重新算出來然後生成一張圖

mat drawimg = mat::zeros(src.size(), cv_8uc3); //這張圖是繪製出來的所以叫三通道的rgb的才好交代一點

for (int row = 0; row < drawimg.rows; row++)

else if (dist < 0) //在多邊形的外部

else}}

imshow("input", src);

imshow("output", drawimg);

waitkey(0);

return 0;

}

opencv學習筆記 28 點多邊形測試

概念介紹 點多邊形測試 測試乙個點是否在給定的多邊形內部,邊緣或者外部 pointpolygontest inputarray contour,輸入的輪廓 point2f pt,測試點 bool measuredist 是否返回距離值,如果是false,1表示在內面,0表示在邊界上,1表示在外部,t...

點 多邊形內外判斷

問題情境 1.判斷點是否在人體某個部位 不規則多邊形 上 思路辨析 判斷方法有好多種,需要考慮到實用性 侷限性 和 化簡易程度。1.面積和判斷,內角和判斷 角法 等,或侷限於多邊形形狀 凹 凸 或 計算有複雜地方 弧長,角度計算 或侷限於多邊形頂點的順序問題等。2.觀察及檢驗之下,射線法 判斷奇偶 ...

求任意多邊形面積(凹多邊形和凸多邊形)

遇到問題 已知多邊形的各個左邊點,要求多邊形的面積 然後我搜尋了下看到這篇文章 這個人說的不多,但是簡單明瞭 首先已知各定點的座標分別為 x1,y1 x2,y2 x3,y3 xn,yn 則該多邊形的面積公式為 s 1 2 x1 y2 x2 y1 x2 y3 x3 y2 xk yk 1 xk 1 yk...