/*
*點多邊形測試
* 概念介紹
測試乙個點是否在給定的多邊形內部,邊緣或者外部
*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...