#include#include#include#includeusing namespace cv;
using namespace std;
/* double pointpolygontest(inputarray contour,point2f pt,bool measuredist);
contour: 輸入點集
pt : 座標點
measuredist:是否計算座標點到輪廓的距離
當measuredist 為false時,函式返回+1,0,-1,分別對應內,上,外
當measuredist 為true時,函式返回距離,正負代表位置。
*/int main()
line(img, contour[num - 1], contour[0], scalar(255), 2);
//標註點的位置
circle(img, point2f(80, 40), 3, scalar(255), cv_filled);
circle(img, point2f(50, 0), 3, scalar(255), cv_filled);
circle(img, point2f(40, 80), 3, scalar(255), cv_filled);
//點在內
double dist1 = pointpolygontest(contour, point2f(80, 40), true);
cout << "dist1:" << dist1 << endl;
//點在上
double dist2 = pointpolygontest(contour, point2f(50, 0), true);
cout << "dist2:" << dist2 << endl;
//點在外
double dist3 = pointpolygontest(contour, point2f(40, 80), true);
cout << "dist3:" << dist3 << endl;
//顯示點集圍成的輪廓和三個標註點
imshow("輪廓", img);
waitkey(0);
return 0;
}
import cv2
import numpy as np
contour=np.array([[0,0],[50,30],[100,100],[100,0]],np.float32)
dist1=cv2.pointpolygontest(contour,(80,40),false);
dist2=cv2.pointpolygontest(contour,(50,0),false);
dist3=cv2.pointpolygontest(contour,(40,80),false);
print(dist1,dist2,dist3)
dist1=cv2.pointpolygontest(contour,(80,40),true);
dist2=cv2.pointpolygontest(contour,(50,0),true);
dist3=cv2.pointpolygontest(contour,(40,80),true);
print(dist1,dist2,dist3)
得到輪廓點的座標資訊
vv contours裡面就是輪廓點的座標資訊 for int i 0 i 如果你要獲取輪廓內部的點 那你演算法用錯了,contour是找邊緣。你要用的是blob,連通域。基於contour做乙個區域蔓延法就行。opencv如何獲取指定圓上所有畫素點的座標 csdn論壇 或者簡單點 建立一副尺寸夠大...
findcounters函式查詢的輪廓點集有序排列
std sort contours.begin contours.end contourssortfun sort是分類函式,引數解釋 第乙個引數是陣列的首位址,一般寫上陣列名就可以,因為陣列名是乙個指標常量。第二個引數相對較好理解,即首位址加上陣列的長度n 代表尾位址的下一位址 最後乙個引數是比較...
點分治 點分樹題目集
學了這麼久的點分治 點分樹,感覺自己還是只會做點裸題 這都要國賽了感覺自己吃棗藥丸。給定一棵 n 個點的樹,每條邊有乙個邊權。接下來有 m 次操作分為以下兩種 n,m le 3 times 10 5 tl 1.5s 原題範圍 n,m le 10 5,tl 4s 原題的做法是個不太優美的根號演算法,事...