在opencv轮廓提取中,如何取得Freeman链码表示的轮廓及轮廓的点坐标呢?

fireflypd 2012-02-19 04:16:00
在opencv轮廓提取中,如何取得Freeman链码表示的轮廓及轮廓的点坐标呢?


#include <cv.h>
#include <highgui.h>
#include <stdio.h>
int main( int argc, char** argv )
{
cvNamedWindow("a", 1);
IplImage* img_8uc1 = cvLoadImage("ScannedImage.bmp", CV_LOAD_IMAGE_GRAYSCALE );
IplImage* img_edge = cvCreateImage( cvGetSize(img_8uc1), 8, 1 );
IplImage* img_8uc3 = cvCreateImage( cvGetSize(img_8uc1), 8, 3 );

cvThreshold( img_8uc1, img_edge, 128, 255, CV_THRESH_BINARY );

CvMemStorage* storage = cvCreateMemStorage();//采用默认大小,即:0.

CvSeq* first_contour = NULL;

int Nc = cvFindContours(img_edge,storage,&first_contour,sizeof(CvContour),
CV_RETR_LIST,
CV_CHAIN_CODE,///*这个是关键参数*/
cvPoint(0, 0)
);
CvChain* chain = 0;
for( CvSeq* c = first_contour; c != NULL; c=c->h_next )
{
CvSeqReader reader;
int i, total = c->total;
cvStartReadSeq( (CvSeq*)c, &reader, 0 );
for( i = 0; i < total; i++ )
{
char code;
CV_READ_SEQ_ELEM( code, reader ); printf(" %d: \n",code); //得到轮廓的Freeman链码序列
CvPoint point;
point=cvReadChainPoint(reader);
printf(" x=%d ;y=%d: \n",point.x,point.y);//得到链码坐标点。
}

程序出错了,不知道该怎么解决,请各位高手帮忙,谢谢啊!!
}
printf("Finished all contours.\n");

cvCvtColor(img_8uc1, img_8uc3, CV_GRAY2BGR);
cvShowImage("a", img_8uc3 );
cvWaitKey(0);
cvDestroyWindow("a");
cvReleaseImage(&img_8uc1);
cvReleaseImage(&img_edge);
cvReleaseImage(&img_8uc3);
return 0;
}
...全文
1692 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-09-17
  • 打赏
  • 举报
回复
建议楼主先编译链接调试OpenCV自带的相关例子代码。
u011099581 2014-09-17
  • 打赏
  • 举报
回复
大家问题解决了么?就是#3遇到的问题,该如何解决?
dxasu 2013-05-23
  • 打赏
  • 举报
回复
我最近也再搞opencv,正在写这个代码,感觉楼主的代码有点乱,等我写完,给楼主贴出来
wo4liuyang 2013-05-21
  • 打赏
  • 举报
回复
同求,不知道链码怎么提取出来呢,大神快来指点一下啊
fireflypd 2012-02-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dizuo 的回复:]
什么错误呢?
[/Quote]
CvMemStorage* storage = cvCreateMemStorage(); //申请存储空间
CvSeq* first_contour = NULL; //申请序列指针
int Nc=cvFindContours(img_edge,storage,&first_contour,sizeof(CvContour),CV_CHAIN_CODE);//寻找图像中所有轮廓

但是读取链码的函数需要CvChain类型的变量怎么办啊?
CvChainPtReader* reader;
cvStartReadChainPoints(c,reader);//c是cvChain类型的
CvPoint point=cvReadChainPoint(reader);

其实就是个类型的问题,但就是不知道这一步怎么解决。。。
ryfdizuo 2012-02-19
  • 打赏
  • 举报
回复
什么错误呢?
fireflypd 2012-02-19
  • 打赏
  • 举报
回复
程序运行时出错了,请教各位高手,谢谢啦!

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧