點和點集(輪廓)關係

2021-09-18 17:41:28 字數 1663 閱讀 8826

#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 原題的做法是個不太優美的根號演算法,事...