最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenCV識別提取圖像中的水平線與垂直線

 更新時間:2020年07月21日 08:54:23   作者:MnisRain  
這篇文章主要為大家詳細(xì)介紹了OpenCV識別提取圖像中的水平線與垂直線,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了OpenCV識別提取圖像中的水平線與垂直線,供大家參考,具體內(nèi)容如下

1).原理

圖像形態(tài)學(xué)操作時候,可以通過自定義的結(jié)構(gòu)元素實現(xiàn)結(jié)構(gòu)元素 對輸入圖像一些對象敏感、另外一些對象不敏感,這樣就會讓敏感的對象改變而不敏感的對象保留輸出。通過使用兩個最基本的形態(tài)學(xué)操作 – 膨脹與腐蝕,使用不同的結(jié)構(gòu)元素實現(xiàn)對輸入圖像的操作、得到想要的結(jié)果。

-膨脹,輸出的像素值是結(jié)構(gòu)元素覆蓋下輸入圖像的最大像素值

-腐蝕,輸出的像素值是結(jié)構(gòu)元素覆蓋下輸入圖像的最小像素值

常見的形狀:矩形、園、直線、磁盤形狀、磚石形狀等各種自定義形狀。

2).步驟

1.輸入圖像彩色圖像 imread
2.轉(zhuǎn)換為灰度圖像 – cvtColor
3.轉(zhuǎn)換為二值圖像 – adaptiveThreshold
4.定義結(jié)構(gòu)元素
5.開操作 (腐蝕+膨脹)提取 水平與垂直線

3).完整代碼

(本人的運(yùn)行環(huán)境是:vs2017+OpenCV3.4)

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace std;
using namespace cv;

//灰度化圖像
Mat gray_Img(Mat src)
{
 Mat dst = Mat::zeros(src.size(), src.type());
 cvtColor(src, dst, CV_BGR2GRAY);
 return dst;
}

//自適應(yīng)閾值(二值化圖像)
Mat threshold_Img(Mat src)
{
 Mat dst = Mat::zeros(src.size(), src.type());
 //參數(shù):輸入, 輸出, 二值圖像的最大值 , 在一個鄰域內(nèi)計算閾值所采用的算法,有兩個取值分別為 ADAPTIVE_THRESH_MEAN_C 和 ADAPTIVE_THRESH_GAUSSIAN_C , 閾值類型只有兩個取值,分別為 THRESH_BINARY 和THRESH_BINARY_INV,(blockSize)adaptiveThreshold的計算單位是像素的鄰域塊,鄰域塊取多大就由這個值作決定, 偏移值調(diào)整量
 adaptiveThreshold(~src, dst, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2); 
 return dst;
}

//結(jié)構(gòu)元素(獲取垂直算子)
Mat get_Vertical(Mat src)
{
 Mat dst = Mat::zeros(src.size(), src.type());
 return getStructuringElement(MORPH_RECT,Size(src.cols/16,1),Point(-1,-1));
}

//結(jié)構(gòu)元素(獲取水平算子)
Mat get_Horizontal(Mat src)
{
 Mat dst = Mat::zeros(src.size(), src.type());
 return getStructuringElement(MORPH_RECT, Size(1, src.rows / 16), Point(-1, -1));
}

//腐蝕
Mat erode_Img(Mat src,Mat kernel)
{
 Mat dst = Mat::zeros(src.size(), src.type());
 erode(src, dst, kernel);
 return dst;
}

//膨脹
Mat dilate_Img(Mat src, Mat kernel)
{
 Mat dst = Mat::zeros(src.size(), src.type());
 dilate(src, dst, kernel);
 return dst;
}


int main()
{
 Mat src = imread("001.png");
 if (src.empty())
 {
 cout << "fail to load image" << endl;
 return -1;
 }

 namedWindow("input_Img", 0);
 imshow("input_Img", src);
 //輸入圖像轉(zhuǎn)灰度
 Mat grayImg = gray_Img(src);
 namedWindow("input_Img_gray", 0);
 imshow("input_Img_gray", grayImg);
 //二值化圖像
 Mat thresholdImg = threshold_Img(grayImg);
 namedWindow("input_Img_threshold", 0);
 imshow("input_Img_threshold", thresholdImg);

 Mat verticalLine = get_Vertical(src);
 Mat horizontalLine = get_Horizontal(src);
 //先腐蝕再膨脹
 Mat vertical_Line_erode = erode_Img(thresholdImg, verticalLine);
 Mat vertical_Line_dilate = dilate_Img(vertical_Line_erode, verticalLine);
 //顯示圖像中的垂直線
 namedWindow("verticalLine", 0);
 imshow("verticalLine", vertical_Line_dilate);

 Mat horizontal_Line_erode = erode_Img(thresholdImg, horizontalLine);
 Mat horizontal_Line_dilate = dilate_Img(horizontal_Line_erode, horizontalLine);
 //顯示圖像中的垂直線
 namedWindow("horizontalLine", 0);
 imshow("horizontalLine", horizontal_Line_dilate);

 waitKey();
 return 0;
}

4).我的運(yùn)行結(jié)果

1.灰度化結(jié)果

2.二值化

3.提取的垂直線

4.提取的水平線

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言詳細(xì)分析講解關(guān)鍵字goto與void的作用

    C語言詳細(xì)分析講解關(guān)鍵字goto與void的作用

    我們在C語言中經(jīng)常會見到void,也會偶爾見到goto,那么C語言中既然有g(shù)oto,為什么我們在代碼中見的很少呢?在以前很多的項目經(jīng)驗中,我們得到這樣一條潛規(guī)則:一般項目都是禁用goto的,程序質(zhì)量與goto的出現(xiàn)次數(shù)成反比。自后也就造成了我們一般不會使用goto
    2022-04-04
  • C?++迭代器iterator在string中使用方法介紹

    C?++迭代器iterator在string中使用方法介紹

    迭代器是一種檢查容器內(nèi)元素并遍歷元素的數(shù)據(jù)類型。迭代器是一個變量,提供對一個容器中的對象的(間接)訪問方法,并且定義了容器中對象的范圍。迭代器可以指向容器中的某個元素,通過迭代器就可以對非數(shù)組(存儲空間不連續(xù))的數(shù)據(jù)結(jié)構(gòu)進(jìn)行遍歷
    2022-10-10
  • C++調(diào)用C函數(shù)實例詳解

    C++調(diào)用C函數(shù)實例詳解

    這篇文章主要介紹了C++調(diào)用C函數(shù)實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C/C++中CJSON的使用(創(chuàng)建與解析JSON數(shù)據(jù))

    C/C++中CJSON的使用(創(chuàng)建與解析JSON數(shù)據(jù))

    cJSON是一個超輕巧的JSON解析器,本文主要介紹了C/C++中CJSON的使用(創(chuàng)建與解析JSON數(shù)據(jù)),具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • C++實例講解四種類型轉(zhuǎn)換的使用

    C++實例講解四種類型轉(zhuǎn)換的使用

    在C++語言中新增了四個關(guān)鍵字static_cast、const_cast、reinterpret_cast和dynamic_cast。這四個關(guān)鍵字都是用于類型轉(zhuǎn)換的,類型轉(zhuǎn)換(type cast),是高級語言的一個基本語法。它被實現(xiàn)為一個特殊的運(yùn)算符,以小括號內(nèi)加上類型名來表示,接下來讓我們一起來詳細(xì)了解
    2022-06-06
  • 純C語言:遞歸組合數(shù)源碼分享

    純C語言:遞歸組合數(shù)源碼分享

    這篇文章主要介紹了純C語言:遞歸組合數(shù)源碼,有需要的朋友可以參考一下
    2014-01-01
  • C++獲取任務(wù)欄打開程序窗口示例

    C++獲取任務(wù)欄打開程序窗口示例

    這篇文章主要介紹了C++獲取任務(wù)欄打開程序窗口,大家可以參考使用
    2013-11-11
  • C++實現(xiàn)掃雷、排雷小游戲

    C++實現(xiàn)掃雷、排雷小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)掃雷、排雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • c++中比較好用的“黑科技”

    c++中比較好用的“黑科技”

    這篇文章主要介紹了c++中比較好用的“黑科技”,一些常用小編沒有給大家羅列出,主要給大家介紹了sort函數(shù),需要的朋友可以參考下
    2020-02-02
  • C語言實現(xiàn)學(xué)生管理系統(tǒng)

    C語言實現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02

最新評論

道孚县| 武义县| 绥化市| 潜山县| 敦化市| 普安县| 界首市| 扎囊县| 庆安县| 洪洞县| 黎川县| 林州市| 和林格尔县| 金乡县| 志丹县| 涡阳县| 台南县| 扎鲁特旗| 专栏| 泊头市| 张家港市| 白山市| 双峰县| 平利县| 开鲁县| 托克逊县| 辽阳县| 右玉县| 万荣县| 辛集市| 台安县| 正阳县| 江陵县| 会昌县| 黄浦区| 崇礼县| 昭苏县| 阳新县| 馆陶县| 长汀县| 廊坊市|