//显示图片

 IplImage * src = cvLoadImage("xx.JPG");
cvNamedWindow("show_image",);
cvShowImage("show_image",src);
cvWaitKey();
cvReleaseImage(&str);
cvDestroyWindow("show_image");

//色彩空间转换,转换类型为CV_BGR2GRAY

 IplImage* dst = cvCreateImage(cvGetSize(src),src->depth,);
cvCvtColor(src,dst,CV_BGR2GRAY);

//开、闭、膨胀、腐蚀操作

 IplConvKernel* element = cvCreateStructuringElementEx(,,,, CV_SHAPE_ELLIPSE,);//创建3*3椭圆结构元素
IplImage * temp=cvCreateImage(cvGetSize(pGrayImg), IPL_DEPTH_8U, );
cvMorphologyEx(pGrayImg,pGrayImg, temp, element,CV_MOP_CLOSE,);//闭操作 先膨胀再腐蚀
cvMorphologyEx(pGrayImg,pGrayImg, temp, element,CV_MOP_OPEN,);//开操作 先腐蚀再膨胀
cvReleaseStructuringElement(&element);
cvReleaseImage(&temp);
cvDilate( pGrayImg, pGrayImg, NULL, );//膨胀
cvErode( pGrayImg, pGrayImg, NULL, );//腐蚀

//边缘检测

cvCanny(pGrayImg,pGrayImg, , ,  );//边缘检测  

//二值图像中检索轮廓

 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(,) ); 

http://blog.csdn.net/augusdi/article/details/9000893

//二值图像中找圆、椭圆拟合

 //椭圆拟合
void my_FitEllipse(CvSeq *pContour, CvBox2D *box_rect)
{
CvMat*p=cvCreateMat(,pContour->total,CV_32FC2);
CvPoint2D32f *p_temp=(CvPoint2D32f*)(p->data.fl); for(int i=;i<pContour->total;i++)
{
CvPoint*p0=(CvPoint*)cvGetSeqElem(pContour,i);
*p_temp=cvPointTo32f(*p0);
p_temp++;
}
*box_rect = cvFitEllipse2(p);
cvReleaseMat(&p);
} /*
*功能描述:
* 二值图像中找圆形
*输入:
* pStrimg - 原图
* vCircle - 圆集合
*/
void findCircle(IplImage *pStrImg, vector<Ccircle> &vCircle)
{
CvSeq *pContour = NULL;
CvSeq *pConInner = NULL;
CvMemStorage *pStorage = NULL;
IplImage *pTmpImg = cvCreateImage(cvGetSize(pStrImg), pStrImg->depth, pStrImg->nChannels);
cvCopy(pStrImg, pTmpImg); // 查找所有轮廓
pStorage = cvCreateMemStorage();
cvFindContours(pTmpImg, pStorage, &pContour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); int wai = ;
int nei = ;
for (; pContour != NULL; pContour = pContour->h_next)
{
wai++;
// 内轮廓循环
for (pConInner = pContour->v_next; pConInner != NULL; pConInner = pConInner->h_next)
{
nei++;
}
if(pContour->total < )
{
//TRACE("Number of points should be >= 5\n");
continue;
}
CvBox2D box_rect;
my_FitEllipse(pContour, &box_rect);
if(fabs(box_rect.size.width - box_rect.size.height) < ){//椭圆长轴,短轴长度相近时判断为圆
Ccircle circle;
circle.center.x = box_rect.center.x;
circle.center.y = box_rect.center.y;
circle.r = (box_rect.size.height + box_rect.size.width) / ;
vCircle.push_back(circle);
}
//cvEllipseBox(pBinary, box_rect, CV_RGB(255, 255, 255));
TRACE("center:%f,%f, w:%f, h:%f\n", box_rect.center.x, box_rect.center.y, box_rect.size.width, box_rect.size.height); //CvRect rect = cvBoundingRect(pContour,0);
//cvRectangle(pBinary, cvPoint(rect.x, rect.y), cvPoint(rect.x + rect.width, rect.y + rect.height),CV_RGB(255,255, 255), 1, 8, 0);
} printf("wai = %d, nei = %d", wai, nei);
cvReleaseImage(&pTmpImg);
cvReleaseMemStorage(&pStorage);
pStorage = NULL; }

//图像上点的访问

     uchar*data ;
uchar*ivs_data ;
//IplImage*ivs_image = cvCreateImage(cvGetSize(gray_image),IPL_DEPTH_8U, 1); ivs_height = dst->height;
ivs_width = dst->width;
ivs_step = dst->widthStep/sizeof(uchar);
ivs_channel = dst->nChannels;
data = (uchar*)str->imageData;
//printf("Processing a %d X %d image with %d channel!\n",ivs_height,ivs_width,ivs_channel); ivs_data = (uchar*)dst->imageData; // 反色图像
for(ivs_i=;ivs_i<ivs_height;ivs_i++)
{
for(ivs_j=;ivs_j<ivs_width;ivs_j++)
{
for(ivs_k=;ivs_k<ivs_channel;ivs_k++)
{
ivs_data[ivs_i*ivs_step+ivs_j*ivs_channel+ivs_k]=-data[ivs_i*ivs_step+ivs_j*ivs_channel+ivs_k]; }//k
}//j
}//i

最新文章

  1. hdu 1863 - 畅通工程(MST)
  2. (转载)String.IsNullorEmpty()方法的使用
  3. 泛函编程(13)-无穷数据流-Infinite Stream
  4. mount/umount系统调用
  5. Java学习----你可以知道对象的工作结果(获取方法的返回值)
  6. net core 依赖注入问题
  7. URAL 1820. Ural Steaks(数学啊 )
  8. 你真的知道为什么不推荐使用@import?
  9. cURL: Learning..
  10. MaltReport2:基于 OpenDocument/OpenOfficeXML 的报表引擎
  11. [Ahoi2005]LANE 航线规划
  12. angular使用Md5加密
  13. IOS-电话拦截
  14. 【CF566C】Logistical Questions 点分
  15. UE4中多种颜色轮廓线的后期处理
  16. php语言介绍分析
  17. Qt在线/离线安装包下载网址和说明
  18. MFC+WinPcap编写一个嗅探器之四(获取模块)
  19. 快速入门:十分钟学会PythonTutorial - Learn Python in 10 minutes
  20. jQuery子页面获取父页面元素

热门文章

  1. node的express中间件之static之ajax提交json
  2. 【UVa】11212 Editing a Book(IDA*)
  3. 论 html与css的关系
  4. .NET中使用unity实现aop
  5. linux加程序是否当掉检测脚本
  6. FTP服务器的搭建与配置
  7. Python 模块 - jieba
  8. 从一个开发的角度看负载均衡和LVS--FullNat
  9. react-router4 嵌套路由
  10. sublime中开启表格插入