opencv cvCanny后想把边缘线画出来,但是老是画不完整怎么办

双子的孤独 2014-04-21 12:14:00
处理过程写的比较简单,先cvSmooth,然后直接cvCanny,接着利用cvHoughLines2来画线。但是canny、
后的图像看着挺正常的,就是画线划不完全,请问该怎么处理?请顺便请帮忙解释下cvHoughLines2(double rho,double theta)这两个参数,谢谢,感激不尽

三张图片分别为原图,canny后的图片,在原图上画线后的图像





IplImage* tem = cvLoadImage("d:\\pic\\3.bmp");
IplImage* deal = cvCreateImage(cvGetSize(tem),8,1);
cvCvtColor(tem,deal,CV_RGB2GRAY);
cvShowImage("src",deal);

cvSmooth(deal,deal);

cvCanny(deal,deal,50,150);
cvShowImage("canny",deal);

CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* seq = 0;
seq = cvHoughLines2(deal,storage,CV_HOUGH_PROBABILISTIC,1,3.14/180,1);
for (int i=0;seq!=NULL;seq=seq->h_next,i++)
{
CvPoint* point = (CvPoint*)cvGetSeqElem(seq,i);
cvLine(tem,point[0],point[1],CV_RGB(255,0,0),2);
}
cvShowImage("line",tem);
...全文
598 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
双子的孤独 2014-04-21
  • 打赏
  • 举报
回复
for循环有问题,改为下边这样子,
for (int i=0;i<seq->total;i++)
{
CvPoint* point = (CvPoint*)cvGetSeqElem(seq,i);
cvLine(tem,point[0],point[1],CV_RGB(255,0,0),2);
int n=8;
}
但是结果画出来的线是完全按照轮廓画的,我想将轮廓拟合成一条线段(直线区域),然后才好做下一步处理,请问该怎么做??

赵4老师 2014-04-21
  • 打赏
  • 举报
回复
《学习OpenCV(中文版)》
赵4老师 2014-04-21
  • 打赏
  • 举报
回复
你应该先腐蚀,再提取轮廓。

3,882

社区成员

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

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