opencv中CvSeq的取点用法

本人小菜,哈哈哈

最近用Opencv中的查找边缘函数:int cvFindContours(  CvArr* image, 

CvMemStorage* storage, 

CvSeq** first_contour,

int header_size=sizeof(CvContour),

int mode=CV_RETR_LIST,

int method=CV_CHAIN_APPROX_SIMPLE, 

CvPoint offset=cvPoint(0,0) ); 

学习了关于里面CvSeq结构的用法,CvSeq结构在Opencv中的源码如下面所示:

    #define CVgSEQUENCE\_FIELDS() \
    int flags; /* micsellaneous flags */ \
    int header_size; /* 序列头的大小 */ \
    struct CvSeq* h_prev; /* 前一个序列 */ \
    struct CvSeq* h_next; /* 后一个序列 */ \
    struct CvSeq* v_prev; /* 第二级前一个序列 */ \
    struct CvSeq* v_next; /* 第二级后一个序列 */ \

    #define CV_SEQUENCE_FIELDS()                                              \
    CV_TREE_NODE_FIELDS(CvSeq);                               

    int total; /* 元素的总个数 */ \
    int elem_size;/* 元素的尺寸 */ \
    char* block_max;/* 上一块的最大块 */ \
    char* ptr; /* 当前写指针 */ \
    int delta_elems; /*序列中快的大小
                        (序列粒度) */
 \
    CvMemStorage* storage; /*序列的存储位置 */ \
    CvSeqBlock* free_blocks; /* 未分配的块序列 */ \
    CvSeqBlock* first; /* 指向第一个快序列 */

    typedef struct CvSeq
  {
       CV_SEQUENCE_FIELDS()
  }
  CvSeq;

要取CvSeq结构体中的点可用:

CvPoint *pt1;

int num; /* 指向结构体CvSeq的序号 */

pt1 = (CvPoint*)cvGetSeqElem(cont, num);

于是,取CvSeq弧的两端点与中间点分别为:

cur_uint->Point1    = (CvPoint*)cvGetSeqElem(cont, 0);

cur_uint->Point2    = (CvPoint*)cvGetSeqElem(cont, total/2);
cur_uint->Point3    = (CvPoint*)cvGetSeqElem(cont, total);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值