OpenCV画出CvBox2D结构(转)
2012-10-24 13:58
330 查看
对给定的2D点集,寻找最小面积的包围矩形,使用函数:
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
points
点序列或点集数组
storage
可选的临时存储仓
函数cvMinAreaRect2通过建立凸外形并且旋转外形以寻找给定2D点集的最小面积的包围矩形。
其中返回的2D盒子定义如下:
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
注意夹角angle是水平轴逆时针旋转,与碰到的第一个边(不管是高还是宽)的夹角。如下图
可用函数cvBoxPoints(box[count],point);寻找盒子的顶点
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
简单证明此函数的计算公式:
计算x,由图可以得到三个方程式:
pt[1].x-pt[0].x=width*sin(angle)
pt[2].x-pt[1].x=height*cos(angle)
pt[2].x-pt[0].x=2(box.center.x-pt[0].x)
联立方程可解得函数里的计算式,算y略。
写了个函数绘制CvBox2D
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
CvBox2DcvMinAreaRect2(constCvArr*points,CvMemStorage*storage=NULL);
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
points
点序列或点集数组
storage
可选的临时存储仓
函数cvMinAreaRect2通过建立凸外形并且旋转外形以寻找给定2D点集的最小面积的包围矩形。
其中返回的2D盒子定义如下:
typedefstructCvBox2D { CvPoint2D32fcenter;/*盒子的中心*/ CvSize2D32fsize;/*盒子的长和宽*/ floatangle;/*水平轴与第一个边的夹角,用弧度表示*/ }CvBox2D;
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
注意夹角angle是水平轴逆时针旋转,与碰到的第一个边(不管是高还是宽)的夹角。如下图
可用函数cvBoxPoints(box[count],point);寻找盒子的顶点
voidcvBoxPoints(CvBox2Dbox,CvPoint2D32fpt[4])
{
doubleangle=box.angle*CV_PI/180.
floata=(float)cos(angle)*0.5f;
floatb=(float)sin(angle)*0.5f;
pt[0].x=box.center.x-a*box.size.height-b*box.size.width;
pt[0].y=box.center.y+b*box.size.height-a*box.size.width;
pt[1].x=box.center.x+a*box.size.height-b*box.size.width;
pt[1].y=box.center.y-b*box.size.height-a*box.size.width;
pt[2].x=2*box.center.x-pt[0].x;
pt[2].y=2*box.center.y-pt[0].y;
pt[3].x=2*box.center.x-pt[1].x;
pt[3].y=2*box.center.y-pt[1].y;
}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
简单证明此函数的计算公式:
计算x,由图可以得到三个方程式:
pt[1].x-pt[0].x=width*sin(angle)
pt[2].x-pt[1].x=height*cos(angle)
pt[2].x-pt[0].x=2(box.center.x-pt[0].x)
联立方程可解得函数里的计算式,算y略。
写了个函数绘制CvBox2D
voidDrawBox(CvBox2Dbox,IplImage*img)
{
CvPoint2D32fpoint[4];
inti;
for(i=0;i<4;i++)
{
point[i].x=0;
point[i].y=0;
}
cvBoxPoints(box,point);//计算二维盒子顶点
CvPointpt[4];
for(i=0;i<4;i++)
{
pt[i].x=(int)point[i].x;
pt[i].y=(int)point[i].y;
}
cvLine(img,pt[0],pt[1],CV_RGB(255,0,0),2,8,0);
cvLine(img,pt[1],pt[2],CV_RGB(255,0,0),2,8,0);
cvLine(img,pt[2],pt[3],CV_RGB(255,0,0),2,8,0);
cvLine(img,pt[3],pt[0],CV_RGB(255,0,0),2,8,0);
}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
相关文章推荐
- OpenCV画出CvBox2D结构(转)
- OpenCV:CvBox2D说明 - 感觉网上绝大部分的解释都很模糊,甚至是错的
- OpenCV编程-> CvBox2D解析
- OpenCV编程-> CvBox2D解析
- 数据结构操作与运算-CvRect,CvBox2D数据结构
- 资料结构操作与运算-CvRect,CvBox2D资料结构
- opencv学习笔记:RotatedRect和CvBox2D的角度疑云
- opencv:RotatedRect和CvBox2D的角度疑云
- 遍历OpenCV中Mat结构最快速的方法
- OpenCV,2.4.8版本的组件结构
- opencv IplImage的数据结构
- OPENCV 2. 数据结构
- OpenCV的概况和基本数据结构
- python opencv入门 轮廓的层次结构(21)
- Torque2D MIT 学习笔记(2) ---- 目录结构
- Cvbox2D
- RotatedRect和CvBox2D的角度疑云
- 如何使用opencv的c++接口来读取、写结构体数组到yml文件中
- OpenCV 2.4.9 学习笔记(1)—— 基本功能结构
- 2D游戏和OpenCV的一点总结