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 多邊形是交叉的且封閉的。如圖二...