opencv绘制多边形

opencv2.4.4

今天用cvFilllPoly()进行图像的绘制,其中遇到一些参数的问题,个人理解如下:

CVAPI(void)  cvFillPoly( CvArr* img, CvPoint** pts, const int* npts,
                         int contours, CvScalar color,
                         int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );

img:图像

pst:折线的顶点指针数组,即:每个图像数组首个坐标的地址

npts:多边形顶点个数数组,2-2个图像,4-第一个图像有4个顶点,3-第二个图像有3个顶点

contours:折线的线段数量,如第三个参数说明所示,我想画两个多边形,那这个参数就是2,如果想画4个多边形,这个参数就是4

color:多边形中的填充色

line_type :组成多边形线段类型

shift:顶点坐标的小数点位数


个人觉得cvFillPoly的难点主要在于双指针和数组处,写了一个程序

方法三:

//画多边形
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include "stdio.h"


int main(void)
{
IplImage* image;
CvSize imagesize = cvSize(640,640);
CvPoint spoint1[3] = {{100,150},{430,240},{352,466}};
CvPoint spoint2[4] = {{440,300},{560,450},{318,600},{100,419}};
CvPoint* pts1[1] = {&spoint1[0]};
CvPoint* pts2[1] = {&spoint2[0]};
int npts1[1] = {3};
int npts2[1] = {4};


image = cvCreateImage(imagesize, IPL_DEPTH_8U, 3);
cvFillPoly(image, pts1, npts1, 1, CV_RGB(255,0,0),8,0);
cvFillPoly(image, pts2, npts2, 1, CV_RGB(0,0,255),8,0);


cvShowImage("image", image);
cvWaitKey(0);
}

方法二:

//画多边形
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include "stdio.h"


int main(void)
{
IplImage* image;
CvSize imagesize = cvSize(640,640);
CvPoint spoint1[3] = {{100,150},{430,240},{352,466}};
CvPoint spoint2[4] = {{440,300},{560,450},{318,600},{100,419}};
CvPoint* pts1[2] = {&spoint1[0],&spoint2[0]};
int npts1[2] = {3,4};


image = cvCreateImage(imagesize, IPL_DEPTH_8U, 3);
cvFillPoly(image, pts1, npts1, 2, CV_RGB(255,0,0),8,0);


cvShowImage("image", image);
cvWaitKey(0);
}


方法三:

//画多边形
/*#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include "stdio.h"


int main(void)
{
IplImage* image;
CvSize imagesize = cvSize(640,640);
CvPoint spoint1[3] = {{100,150},{430,240},{352,466}};
CvPoint spoint2[4] = {{440,300},{560,450},{318,600},{100,419}};
CvPoint* pts1[1] = {&spoint1[0]};
CvPoint* pts2[1] = {&spoint2[0]};
int npts1[1] = {3};
int npts2[1] = {4};


image = cvCreateImage(imagesize, IPL_DEPTH_8U, 3);
cvFillPoly(image, pts1, npts1, 1, CV_RGB(255,0,0),8,0);
cvFillPoly(image, pts2, npts2, 1, CV_RGB(0,0,255),8,0);


cvShowImage("image", image);
cvWaitKey(0);
}*/


//画多边形
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include "stdio.h"


int main(void)
{
IplImage* image;
CvSize imagesize = cvSize(640,640);
CvPoint spoint1[7];
CvPoint* pts1[2] = {&spoint1[0],&spoint1[3]};
int npts1[2] = {3,4};


spoint1[0] = cvPoint(100,150);
spoint1[1] = cvPoint(430,240);
spoint1[2] = cvPoint(352,466);
spoint1[3] = cvPoint(440,300);
spoint1[4] = cvPoint(560,450);
spoint1[5] = cvPoint(318,600);
spoint1[6] = cvPoint(100,419);


image = cvCreateImage(imagesize, IPL_DEPTH_8U, 3);
cvFillPoly(image, pts1, npts1, 2, CV_RGB(255,0,0),8,0);


cvShowImage("image", image);
cvWaitKey(0);
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值