189 8069 5689

opencv检测直线方法之形态学方法-创新互联

在阅读文献中,偶然发现使用使用形态学方法也可以检测直线,故做实验并记录。

创新互联建站是一家专业提供甘肃企业网站建设,专注与网站设计、成都网站制作HTML5、小程序制作等业务。10年已为甘肃众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。

使用该方法,需要定义一个长度为L的结构元素element,其大小应足够大以保留图像中的字符笔划,然而又恰好能检测出图像中最短的表格线。

定义如下两个结构element用以检测图中水平、竖直的表格线:

Mat element1 = getStructuringElement(MORPH_RECT, Size(70, 1));// size的width应大于图像中的横向笔划

Mat element3 = getStructuringElement(MORPH_RECT, Size(1, 55));//size的height应大于图像中的竖直笔划

之后分别用以上结构元素对图像的水平以及竖直方向做闭运算以抹去水平或竖直表格线以外的细节:

morphologyEx(image, imageF1, MORPH_CLOSE, element1);

morphologyEx(image, imageF4, MORPH_CLOSE, element3);

下面附上整体代码:

#include "core/core.hpp" 
#include "highgui/highgui.hpp" 
#include "imgproc/imgproc.hpp" 
#include  
 
using namespace std;
using namespace cv;
 
int main()
{
 Mat image = imread("E:\\x.jpg", 1);
 Mat imageF1, imageF2, imageF3, imageF4, imageF5, imageF6, imageF7;
 cvtColor(image, image, CV_RGB2GRAY);
 namedWindow("原图");
 imshow("原图", image);
 
 Mat element1 = getStructuringElement(MORPH_RECT, Size(73, 1)); 
 Mat element3 = getStructuringElement(MORPH_RECT, Size(1, 80));
 
 
 morphologyEx(image, imageF1, MORPH_CLOSE, element1);
 threshold(imageF1, imageF2, 200, 255, CV_THRESH_OTSU | CV_THRESH_BINARY_INV);//自适应阈值
 
 morphologyEx(image, imageF4, MORPH_CLOSE, element3);
 threshold(imageF4, imageF5, 200, 255, CV_THRESH_OTSU | CV_THRESH_BINARY_INV);
 
 bitwise_or(imageF2, imageF5, imageF7);
 
 
 namedWindow("F1");
 imshow("F1", imageF1);
 namedWindow("F2");
 imshow("F2", imageF2); 
 namedWindow("F4");
 imshow("F4", imageF4);
 namedWindow("F7");
 imshow("F7", imageF7);
 namedWindow("F5");
 imshow("F5", imageF5);
 
 
 waitKey(0);
 
 return 0;
}

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


名称栏目:opencv检测直线方法之形态学方法-创新互联
URL分享:http://cdxtjz.com/article/dojsip.html

其他资讯