判斷乙個點是否在RotatedRect中

2021-10-23 21:11:56 字數 1113 閱讀 1846

opencv函式pointpolygontest():

c++: double pointpolygontest(inputarray contour, point2f pt, bool measuredist)

用於判斷乙個點是否在輪廓中 

當measuredist設定為true時,若返回值為正,表示點在輪廓內部,返回值為負,表示在輪廓外部,返回值為0,表示在輪廓上。 

當measuredist設定為false時,若返回值為+1,表示點在輪廓內部,返回值為-1,表示在輪廓外部,返回值為0,表示在輪廓上。 

例:……

/// 查詢輪廓std::vector>

contours;

cv :

:mat src;

//src為輸入影象

cv :

0,0));

//判斷p1(x,y)是否在輪廓內

cv :

:point p1(x,y);

if(pointpolygontest(contours[j],cv

::point(x1,y1),

false

==1)

……

但是這個函式是用來處理「輪廓」,也就是點的集合的;對於這裡rotatedrect,它本身只是乙個opencv的資料結構,所以我們如果想使用

pointpolygontest,就需要首先將

rotatedrect轉換為輪廓。對於rotatedrect,其實轉換很簡單,直接將它的四個角的座標塞到乙個vector裡面就可

以,當然了,對於其它複雜輪廓來說,可能會需要更多操作。

可以參考

那麼,最後合成的程式為:

booldoesrectanglecontainpoint(rotatedrect rectangle, point2f point)

需要注意的是,在這裡

indicator 

>

=0,如果你是判斷是否在輪廓上,要修改為

indicator ==0

參考:

來自為知筆記(wiz)

判斷乙個點是否在RotatedRect中

opencv函式pointpolygontest c double pointpolygontest inputarray contour,point2f pt,bool measuredist 用於判斷乙個點是否在輪廓中 當measuredist設定為true時,若返回值為正,表示點在輪廓內部,返...

判斷乙個點是否在乙個多邊形裡

判斷乙個點是否在乙個多邊形裡 一開始以為是個挺難的問題,但google了一下之後發現其實蠻簡單,所用到的演算法叫做 ray casting algorithm 中文應該叫 光線投射演算法 這是維基百科的描述 維基百科 簡單地說可以這麼判斷 從這個點引出一根 射線 與多邊形的任意若干條邊相交,累計相交...

判斷乙個點是否在多邊形中

例項 1 圖 1是乙個典型的14邊形,紅點為測試點,判斷該紅點是否在14邊形中。解決方法 穿過紅點,做一條平行於x軸的水平線,於14邊形共有8個交點,如果,在紅點的左右兩邊各有奇數個交點,那麼在多邊形中 如果,左右兩邊各有偶數個交點,那麼不在多邊形中 圖 2 例項 2 多邊形是交叉的且封閉的。如圖二...