opencv 提取曲线并用矩形框框出来
来源:互联网 发布:手机电子书软件 编辑:程序博客网 时间:2024/04/28 11:36
老师提出写个提取裂缝,并用矩形框框出来的小程序,不用多好,能跑起来看看就行,由于裂纹没有现成的,就随便划了 黑线做个模仿,由于水平比较菜,就在网上抄些程序改改,拼拼,好歹算搞定了,也算个demo吧,嘿嘿~~~希望对大家有帮助
原图在这:,,,额 ,真的好大,算了 ,不弄了,就这样了
下面直接贴代码喽~~~
<pre name="code" class="html">#include "stdafx.h"#include "stdio.h"#include "cv.h"#include "highgui.h"#include <iostream>#include <string>using namespace std;using namespace cv;void sum_rgb( IplImage* src, IplImage* dst) //该函数的作用就是转灰度后二值化{IplImage* r=cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);IplImage* g=cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);IplImage* b=cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);//函数 cvSplit 分割多通道数组成分离的单通道数组dcvSplit(src,r,g,b,NULL);IplImage* s=cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);cvAddWeighted(r, 1./3, g, 1./3, 0.0, s);cvAddWeighted(s, 2./3, b, 1./3, 0.0, s);cvThreshold(s,dst,50,255,CV_THRESH_BINARY );cvReleaseImage(&r);cvReleaseImage(&g);cvReleaseImage(&b);cvReleaseImage(&s);}int main(int argc,char** argv){CvSeq * contour=NULL;CvSeq * contourMax=NULL;CvMemStorage * storage=cvCreateMemStorage();cvNamedWindow("aaa",1);IplImage* src=cvLoadImage("1.png");IplImage* dst=cvCreateImage(cvGetSize(src),src->depth,1);IplImage * tempdst1=cvCreateImage(cvGetSize(src),src->depth,3);IplImage *pCannyImg=cvCreateImage(cvGetSize(src),src->depth,1);sum_rgb(src,dst); cvErode(dst, dst, 0, 3); cvZero(tempdst1);int maxh = 0,maxw=0;int minh=100000,minw=100000;//取边缘 以便轮廓提取cvCanny(dst,pCannyImg,0,10,3);//轮廓提取cvFindContours(pCannyImg,storage,&contour,sizeof(CvContour),CV_RETR_CCOMP ,CV_CHAIN_APPROX_SIMPLE);cvZero(tempdst1);double areaMax=cvContourArea( contour,CV_WHOLE_SEQ );for( ; contour != NULL; contour = contour->h_next){ //轮廓的方向影响面积的符号。因此函数也许会返回负的结果。应用函数 fabs() 得到面积的绝对值。 double area = cvContourArea( contour,CV_WHOLE_SEQ );//计算整个轮廓或部分轮廓的面积if(fabs(area) >= areaMax){areaMax=area;contourMax=contour;}} //把黑线框出来CvScalar color = CV_RGB(255, 0, 0);CvRect rect = cvBoundingRect(contourMax,0);cvRectangle(tempdst1, cvPoint(rect.x, rect.y), cvPoint(rect.x + rect.width, rect.y + rect.height),CV_RGB(255,0,0), 3, 8, 0);IplImage* temp2 = cvCreateImage(cvGetSize(tempdst1), IPL_DEPTH_8U, 1); //创建目标图像cvCvtColor(tempdst1,temp2,CV_BGR2GRAY); //cvCvtColor(src,des,CV_BGR2GRAY)cvAddWeighted(src,1,tempdst1,0.9,0,src);cvReleaseMemStorage(&storage);storage=NULL;cvShowImage("aaa",src);cvWaitKey(0);cvDestroyAllWindows();cvReleaseImage(&src);cvReleaseImage(&dst);return 0;}
演示下结果:
嗯,应该算完成了任务了吧~~~嘎嘎~~~
0 0
- opencv 提取曲线并用矩形框框出来
- opencv提取图像的缺陷并用最小矩形框出来
- opencv矩形轮廓提取
- OpenCV 提取图片中的曲线
- C++ 读取的dxf文件并用OpenCV绘制出来
- opencv 如何提取旋转矩形的ROI
- opencv 绘制矩形,提取矩形区域的直方图
- opencv外接矩形和矩阵提取的细节探讨
- opencv提取外部轮廓并在外部加矩形框
- 【OpenCV函数】轮廓提取;轮廓绘制;轮廓面积;外接矩形
- Opencv 轮廓 逼近多边形曲线 正外接矩形 外接最小矩形
- OpenCV中提取R,G,B通道,并显示出来。
- 在pcl用例中获取kinect深度图像数据,并用opencv显示出来
- Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示
- Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示(转)
- Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示
- Kinect开发笔记之(五)提取颜色数据并用OpenCV显示
- Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示
- CocoaPods的下载和安装及常见问题
- Camera Function - 摄像头功能说明
- CentOS(Linux)下如何安装源码包
- 基于 zepto 的触摸函数封装
- cocos2dx 音频模块分析(2): 音效部分
- opencv 提取曲线并用矩形框框出来
- ContentProvider实现数据共享
- hadoop单机版搭建过程
- 关于抽烟
- apache整合tomcat实现负载均衡
- 那些年的面试总结2015-07-29
- socket和webservice区别,他们各自有什么优缺点
- ffmpeg精简
- 被开博客