OpenCV图像分割.docx
- 文档编号:25067937
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:13
- 大小:661.34KB
OpenCV图像分割.docx
《OpenCV图像分割.docx》由会员分享,可在线阅读,更多相关《OpenCV图像分割.docx(13页珍藏版)》请在冰豆网上搜索。
OpenCV图像分割
实验概述
【实验目的及要求】
图像分割
【实验原理】
图像分割
【实验环境】
VisualC++6.0
Xvid
实验内容
【实验方案设计】
先根据要求查询资料通过上网查到需要的信息
然后整合做出计划性的步骤
【实验过程】
Contour:
Houghcircles:
Houghlines:
3.源程序
Contour:
#include"cv.h"
#include"highgui.h"
intmain(intargc,char**argv)
{
IplImage*src;
//第一条命令行参数确定了图像的文件名。
if(argc==2&&(src=cvLoadImage(argv[1],0))!
=0)
{
IplImage*dst=cvCreateImage(cvGetSize(src),8,3);
CvMemStorage*storage=cvCreateMemStorage(0);
CvSeq*contour=0;
cvThreshold(src,src,1,255,CV_THRESH_BINARY);
cvNamedWindow("Source",1);
cvShowImage("Source",src);
cvFindContours(src,storage,&contour,sizeof(CvContour),CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE);
cvZero(dst);
for(;contour!
=0;contour=contour->h_next)
{
CvScalarcolor=CV_RGB(rand()&255,rand()&255,rand()&255);
/*用1替代CV_FILLED所指示的轮廓外形*/
//cvDrawContours(dst,contour,color,color,-1,CV_FILLED,8);
cvDrawContours(dst,contour,color,color,-1,1,8);
}
cvNamedWindow("Components",1);
cvShowImage("Components",dst);
cvWaitKey(0);
}
}
Houghcircles:
#include
#include
#include
intmain(intargc,char**argv)
{
IplImage*img;
if(argc==2&&(img=cvLoadImage(argv[1],1))!
=0)
{
IplImage*gray=cvCreateImage(cvGetSize(img),8,1);
CvMemStorage*storage=cvCreateMemStorage(0);
cvCvtColor(img,gray,CV_BGR2GRAY);
cvSmooth(gray,gray,CV_GAUSSIAN,9,9);//smoothit,otherwisealotoffalsecirclesmaybedetected
CvSeq*circles=cvHoughCircles(gray,storage,CV_HOUGH_GRADIENT,2,gray->height/4,200,100);
inti;
for(i=0;i
{
float*p=(float*)cvGetSeqElem(circles,i);
cvCircle(img,cvPoint(cvRound(p[0]),cvRound(p[1])),3,CV_RGB(0,255,0),-1,8,0);
cvCircle(img,cvPoint(cvRound(p[0]),cvRound(p[1])),cvRound(p[2]),CV_RGB(255,0,0),3,8,0);
}
cvNamedWindow("circles",1);
cvShowImage("circles",img);
cvWaitKey(0);
}
return0;
}
Houghlines:
/*这是一个命令行程序,以图像作为文件输入变量
编译时选择“#if1”或“#if0”,可以使用标准和概率HOUGH变换两种方法*/
#include
#include
#include
intmain(intargc,char**argv)
{
IplImage*src;
if(argc==2&&(src=cvLoadImage(argv[1],0))!
=0)
{
IplImage*dst=cvCreateImage(cvGetSize(src),8,1);
IplImage*color_dst=cvCreateImage(cvGetSize(src),8,3);
CvMemStorage*storage=cvCreateMemStorage(0);
CvSeq*lines=0;
inti;
cvCanny(src,dst,50,200,3);
cvCvtColor(dst,color_dst,CV_GRAY2BGR);
#if1
lines=cvHoughLines2(dst,storage,CV_HOUGH_STANDARD,1,CV_PI/180,150,0,0);
for(i=0;i
{
float*line=(float*)cvGetSeqElem(lines,i);
floatrho=line[0];
floattheta=line[1];
CvPointpt1,pt2;
doublea=cos(theta),b=sin(theta);
if(fabs(a)<0.001)
{
pt1.x=pt2.x=cvRound(rho);
pt1.y=0;
pt2.y=color_dst->height;
}
elseif(fabs(b)<0.001)
{
pt1.y=pt2.y=cvRound(rho);
pt1.x=0;
pt2.x=color_dst->width;
}
else
{
pt1.x=0;
pt1.y=cvRound(rho/b);
pt2.x=cvRound(rho/a);
pt2.y=0;
}
cvLine(color_dst,pt1,pt2,CV_RGB(255,0,0),1,8);
}
#else
lines=cvHoughLines2(dst,storage,CV_HOUGH_PROBABILISTIC,1,CV_PI/180,280,30,10);
for(i=0;i
{
CvPoint*line=(CvPoint*)cvGetSeqElem(lines,i);
cvLine(color_dst,line[0],line[1],CV_RGB(255,0,0),1,8,0);
}
#endif
cvNamedWindow("Source",1);
cvShowImage("Source",src);
cvNamedWindow("Hough",1);
cvShowImage("Hough",color_dst);
cvWaitKey(0);
}
}
【结果】
1.编写程序
Contour:
Houghcircles:
Houghlines:
2.图片
Contour:
Houghcircles:
Houghlines:
小结
图像分割
图像分割是图像处理这门学科中的基础难题,,图像分割是图像处理领域和计算机视觉中的基本而关键的问题。
其目的就是将人们感兴趣的目标从图像背景中提取出来,为后续的分类、跟踪、识别、处理等提供基础。
由于图像分割的重要性,对图像研究就显得格外重要。
指导教师评语及成绩
评语:
成绩:
指导教师签名:
批阅日期:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenCV 图像 分割