opencv檢測直線方法之形態(tài)學(xué)方法
在閱讀文獻(xiàn)中,偶然發(fā)現(xiàn)使用使用形態(tài)學(xué)方法也可以檢測直線,故做實(shí)驗(yàn)并記錄。
使用該方法,需要定義一個(gè)長度為L的結(jié)構(gòu)元素element,其大小應(yīng)足夠大以保留圖像中的字符筆劃,然而又恰好能檢測出圖像中最短的表格線。
定義如下兩個(gè)結(jié)構(gòu)element用以檢測圖中水平、豎直的表格線:
Mat element1 = getStructuringElement(MORPH_RECT, Size(70, 1));// size的width應(yīng)大于圖像中的橫向筆劃
Mat element3 = getStructuringElement(MORPH_RECT, Size(1, 55));//size的height應(yīng)大于圖像中的豎直筆劃
之后分別用以上結(jié)構(gòu)元素對圖像的水平以及豎直方向做閉運(yùn)算以抹去水平或豎直表格線以外的細(xì)節(jié):
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 <iostream>
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);//自適應(yīng)閾值
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;
}
實(shí)驗(yàn)結(jié)果如下:

記錄內(nèi)容如有不妥之處,望指正!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于C語言實(shí)現(xiàn)靜態(tài)通訊錄的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)一個(gè)簡單的靜態(tài)通訊錄,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下2022-07-07
Qt實(shí)現(xiàn)Slider滑塊條組件的示例代碼
在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,本文主要介紹了Qt實(shí)現(xiàn)Slider滑塊條組件的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
C/C++中memset,memcpy的使用及fill對數(shù)組的操作
這篇文章主要介紹了C/C++中memset,memcpy的使用及fill對數(shù)組的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
淺談C++虛重載操作符 virtual operator= 的使用方法
下面小編就為大家?guī)硪黄獪\談C++虛重載操作符 virtual operator= 的使用方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
C/C++高精度運(yùn)算(大整數(shù)運(yùn)算)詳細(xì)講解
高精度算法的本質(zhì)是把大數(shù)拆成若干固定長度的塊,然后對每一塊進(jìn)行相應(yīng)的運(yùn)算,下面這篇文章主要給大家介紹了關(guān)于C/C++高精度運(yùn)算(大整數(shù)運(yùn)算)的相關(guān)資料,需要的朋友可以參考下2022-11-11
使用c語言輕松實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存管
這篇文章主要介紹了使用c語言輕松實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存管,本文章內(nèi)容詳細(xì),具有很好的參考價(jià)值,希望對大家有所幫助,需要的朋友可以參考下2023-01-01

