1)最小外接矩形
輪廓最小外接矩形–minarearect()
rotatedrect minarearect(inputarray points);
**points :輸入的二維點集,可以填mat 型別或std::vector
**返回值:rotatedrect類矩形物件,外接旋轉矩形主要成員有center,size,angle,points
在opencv中,座標的原點在左上角,與x軸平行的方向為角度0,逆時針旋轉角度是負,順時針旋轉角度是正,而rotatedrect類是以矩形的哪一條邊與x軸的夾角作為角度的呢?angle是水平軸(x軸)逆時針旋轉,與碰到的第乙個邊的夾角,而opencv預設把這個邊的邊長作為width,angle的取值範圍必然是負的
vector
box(contours.size());
point2f rect[4];
for(int i=0;i應用一 :粗略計算長寬(畫素)
應用二 :旋轉矯正
//輪廓最小外接矩形的矩陣 計算長寬
//精度高的話 要用單目測距 雙目測距
void main()
puttext(dstimg.width,point(235,260),cv_font_hershey_complex_small,0.85,scalar(0,255,0),2,8);
puttext(dstimg.height,point(235,285),cv_font_hershey_complex_small,085,scalar(0,255,0),2,8);
} imshow("dst",dstimg);
waitkey(0);
}
//傾斜物體矯正提取
//threshold(srcimg,srcimg,100,255,cv_thresh_binary_inv);//二值化
//adaptivethreshold(srcimg,srcimg,255,aadaptive_thresh_gaussian_c,cv_yhresh_binary_inv,15,3);
imshow("threshoold",srcimg);
mat element=getstructuringelent(moprh_rect,size(11,11),point(-1,-1));
dilate(srcimg,srcimg,element);
imshow("dilate",srcimg);
erode(srcimg,srcimg,element);
imshow("erode",srcimg); //做完膨脹做的腐蝕 用一樣的核
vector
boundrect(contours.size());
vector
box(contours.size());
point2f rect[4];
for(int i=0;iif(box[i].size,width<100||box[i].size.height<100)
continue;//設定範圍
circle(dstimg,point(box[i].center.x,box[i],center.y),5,scalar(0,255,0),-1,8);
count<<"num="
sprintf(width,"width=%0.2f",box[i].size.width);
sprintf(height,"height=%0.2f",box[i].size.height);
box[i].points(rect);
rectangle(dstimg,point(boundrect[i].x,boundrect[i].y),point(boundrect[i].x+boundrect[i].width,boundrect[i].y+boundrect[i].height));
}//經驗值
if(0
angle=angle;
else
if(45
angle=90-abs(angle);
point2f center=box[i].center;//定義旋轉中心座標
double angle0=angle;
double scale=1;
mat roatem;
roatem=getrotationmateix2d(center,angle0,scale);//獲得旋轉矩陣
warpaffine((dstimg,dstimg,roatem,dstimg.size());//利用放射變換進行旋轉
//另一種方法,透視變換
opencv 輪廓屬性
1.aspect ratio寬與高之比 cv2 boundingrect cnt 2.extent 目標面積 佔 邊界矩形框 的比例area cv2.contourarea cnt x,y,w,h cv2.boundingrect cnt rect area w h extent float are...
opencv 輪廓特徵2
函式 moments moments inputarray array,bool binaryimage false 用來計算多邊形或珊格形狀的0 3階矩。moments類定義如下 classmoments mxx是0 3階矩,muxx是0 3階中心矩,nuxx是0 3階歸一化中心矩,公式如下 當計...
OpenCV 輪廓基本特徵
一 概述 我們通過cvfindcontours 函式獲取得影象輪廓有何作用呢?一般來說,我們對輪廓常用的操作有識別和處理,另外相關的還有多種對輪廓的處理,如簡化或擬合輪廓,匹配輪廓到模板,等等。我們在輪廓處理中經常需要對輪廓變化一些特徵進行概括,比如長度或者一些反映輪廓整體大小的度量。另外輪廓矩也是...