opencv提取外部轮廓并在外部加矩形框

  

这段时间一直在用opencv搞图像处理的问题,发现虽然可调用的函数多,但是直接找相应代码还是很困难,就行寻找连通域,并在连通域外侧加框,对于习惯使用垫矩形操作的我,真心感觉代码少之又少,为防止以后自己还会用的到,特在此记录一下。

  

要对下面的图像进行字符的边缘检测。

  

 opencv提取外部轮廓并在外部加矩形框

  

程序中具体的步骤为:

  

(1)灰度化,二值化

  

(2)图像膨胀

  

(3)检测膨胀图像的边缘并叫外矩形框

  

实现代码如下:

        # include“stdafx.h”   # include“stdio . h”   # include“Base_process.h”   # include“opencv/cv.h”   # include“opencv/highgui.h”   # include & lt; opencv2/opencv.hpp>   # include & lt; tchar.h>   # include & lt; iostream>   # include & lt; fstream>      使用名称空间性病;   使用名称空间的简历;      void main ()   {   垫src=https://www.yisu.com/zixun/imread (“D: \ \ Recognize_Form_Project \ \ test_images \ \ 0. jpg”);//图片路径/* image180.jpg */垫gray_image;   cvtColor (gray_image src CV_BGR2GRAY);   imwrite (“src.jpg src);      垫binary_image;   CV_ADAPTIVE_THRESH_MEAN_C adaptiveThreshold (gray_image binary_image, 255年,   25岁的CV_THRESH_BINARY_INV 10);///局部自适应二值化函数      imwrite (“erzhi.jpg”, binary_image);//去噪   垫de_noise=binary_image.clone ();//中值滤波      medianBlur (binary_image de_noise 5);/////////////////////////膨胀////////////////////垫dilate_img;   垫元素=getStructuringElement (MORPH_RECT、大小(20、20/* 15、15 */));   扩张(de_noise dilate_img元素);   imwrite (“dilate.jpg”, dilate_img);//外部加框//检测连通域,每一个连通域以一系列的点表示,FindContours方法只能得到第一个域   vector比;轮廓;   vector层次结构;   findContours (dilate_img、轮廓、层次结构、CV_RETR_EXTERNAL CV_CHAIN_APPROX_NONE);//CV_RETR_EXTERNAL只检测外部轮廓,可根据自身需求进行调整      垫contoursImage (dilate_img。行,dilate_img。关口,CV_8U标量(255));   int指数=0;   (;指数在=0;指数=层次结构(指数)[0]){   简历:标量颜色(rand (),255年,兰德(),255年,兰德(),255);//2 opencv//简历::drawContours (dstImage、轮廓、指数、颜色、CV_FILLED 8层次);//CV_FILLED所在位置表示轮廓线条粗细度,如果为负值(如厚度==CV_FILLED),绘制在轮廓内部//opencv 3//简历::drawContours (contoursImage、轮廓、索引、颜色、简历::,8,层次结构);      简历::drawContours (contoursImage、轮廓、指数、标量(0),1,8,层次);//描绘字符的外轮廓      矩形矩形=boundingRect(轮廓(指数));//检测外轮廓   矩形,矩形(contoursImage标量(0,0255),3);//对外轮廓加矩形框   }         imwrite (“zt.jpg”, contoursImage);      cout & lt; & lt;“完成检测”;      de_noise.release ();   element.release ();   dilate_img.release ();   binary_image.release ();   gray_image.release ();   }      

相应的结果图:

  

膨胀图:

  

 opencv提取外部轮廓并在外部加矩形框

  

连通域检测图:

  

 opencv提取外部轮廓并在外部加矩形框

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

opencv提取外部轮廓并在外部加矩形框