距离变换
来源:互联网 发布:html页面嵌入php代码 编辑:程序博客网 时间:2024/05/20 11:25
#include <cv.h>#include <highgui.h>int main(){ char* filename = "cs.jpg"; IplImage* src_image = cvLoadImage(filename,1); if(!src_image) return -1; cvNamedWindow("src"); CvSize size = cvGetSize(src_image); IplImage* gray_image = cvCreateImage(size,8,1); cvCvtColor(src_image,gray_image,CV_BGR2GRAY); IplImage* dist_image = cvCreateImage(size,32,1); IplImage* bi_src = cvCreateImage(size,8,1); IplImage* dist8u_image = cvCreateImage(size,8,1); IplImage* bi_dist = cvCreateImage(size,8,1); //原图像二值化 cvThreshold(gray_image,bi_src,100,255,CV_THRESH_BINARY); //距离变换 cvDistTransform(bi_src,dist_image,CV_DIST_L2,3,0,0); //找最大值 double max; cvMinMaxLoc(dist_image,0,&max,0,0); cvCvtScale(dist_image,dist8u_image,255./max); cvShowImage("dist8u_image",dist8u_image);//这一句我自己加的,显示出我们想要看到的距离变换之后的图像 //对距离图像二值化,去除手指部分 cvThreshold(dist8u_image,bi_dist,80,255,CV_THRESH_BINARY); //求重心 float s=0.0, x=0.0, y=0.0; uchar* data = (uchar*)bi_dist->imageData; int step = bi_dist->widthStep; for(int h=0;h<bi_dist->height;h++) for(int w=0;w<bi_dist->width;w++) if(255 == data[step*h+w]) { x += w; y += h; s++; } if(s>0) { x = x/s; y = y/s; } CvPoint pos = cvPoint((int)x,(int)y); cvCircle(src_image,pos,3,CV_RGB(255,0,0),1,CV_AA); cvShowImage("src",src_image); cvWaitKey(-1); cvDestroyWindow("src"); cvReleaseImage(&src_image); cvReleaseImage(&gray_image); cvReleaseImage(&bi_src); cvReleaseImage(&dist8u_image); cvReleaseImage(&bi_dist); return 0;}
阅读全文
0 0
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换
- 距离变换(cvDistTransform)
- 距离变换的理解
- Emgu 距离变换
- VS 2012打开提示 未能将网站×××配置为使用 ASP.NET 4.5 和 尚未在Web服务器上注册,您需要手动将Web服务器配置为使用ASP.NET 4.5
- 百练2757:最长上生子序列题解
- 【bzoj4566】[Haoi2016]找相同字符
- 使用Haar分类器进行面部检测【转】
- 枚举类的赋值和基本操作
- 距离变换
- ios项目的托管
- Coins(多重背包)
- OpenCV学习之椭圆曲线拟合
- java基础总结 第一天
- 高德地图实现多点标注marker和动态信息窗体
- redis的event处理过程基本流程
- 怎么实现多个jar包一起依赖
- Java面向对象简单总结(二)