欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenCV實(shí)現(xiàn)輪廓檢測(cè)與繪制

 更新時(shí)間:2021年06月23日 09:59:31   作者:我有一個(gè)夢(mèng)想  
這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)輪廓檢測(cè)與繪制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

圖像的輪廓不僅能夠提供物體的邊緣,而且還能提供物體邊緣之間的層次關(guān)系以及拓?fù)潢P(guān)系。

帶有結(jié)構(gòu)關(guān)系的邊緣檢測(cè),這種結(jié)構(gòu)關(guān)系可以表明圖像中連通域或者某些區(qū)域之間的關(guān)系。

圖為一個(gè)具有4個(gè)不連通邊緣的二值化圖像,由外到內(nèi)依次為0號(hào)、1號(hào)、2號(hào)、3號(hào)條邊緣。為了描述不同輪廓之間的結(jié)構(gòu)關(guān)系,定義由外到內(nèi)的輪廓級(jí)別越來越低,也就是高一層級(jí)的輪廓包圍著較低層級(jí)的輪廓,被同一個(gè)輪廓包圍的多個(gè)不互相包含的輪廓是同一層級(jí)輪廓。例如在圖中,0號(hào)輪廓層級(jí)比1號(hào)和第2號(hào)輪廓的層及都要高,2號(hào)輪廓包圍著3號(hào)輪廓,因此2號(hào)輪廓的層級(jí)要高于3號(hào)輪廓。

常用4個(gè)參數(shù)來描述不同層級(jí)之間的結(jié)構(gòu)關(guān)系:同層下一個(gè)輪廓索引、同層上一個(gè)輪廓索引、下一層第一個(gè)子輪廓索引上層父輪廓索引。

上圖中0號(hào)輪廓沒有同級(jí)輪廓和父輪廓需要用-1表示,其第一個(gè)子輪廓為1號(hào)輪廓,因此可以用描述該輪廓的結(jié)構(gòu)。1號(hào)輪廓的下一個(gè)同級(jí)輪廓為2號(hào)輪廓但是沒有上一個(gè)同級(jí)輪廓用-1表示,父輪廓為0號(hào)輪廓,第一個(gè)子輪廓為3號(hào)輪廓,因此可以用描述該輪廓結(jié)構(gòu)。2號(hào)輪廓和3號(hào)輪廓同樣可以用這樣的方式構(gòu)建結(jié)構(gòu)關(guān)系描述子。圖中不同輪廓之間的層級(jí)關(guān)系可以用圖表示。

在二值圖像中檢測(cè)圖像中所有輪廓并生成不同輪廓結(jié)構(gòu)關(guān)系描述子:

void findContours( InputOutputArray image, OutputArrayOfArrays contours,
                              OutputArray hierarchy, int mode,
                              int method, Point offset = Point());
  • image:輸入圖像,數(shù)據(jù)類型為CV_8U的單通道灰度圖像或者二值化圖像。
  • contours:檢測(cè)到的輪廓,每個(gè)輪廓中存放著像素的坐標(biāo)。
  • hierarchy:輪廓結(jié)構(gòu)關(guān)系描述向量。
  • mode:輪廓檢測(cè)模式標(biāo)志,可以選擇的參數(shù)在表7-2給出。
  • method:輪廓逼近方法標(biāo)志,可以選擇的參數(shù)在表7-3給出。
  • offset:每個(gè)輪廓點(diǎn)移動(dòng)的可選偏移量。這個(gè)參數(shù)主要用在從ROI圖像中找出輪廓并基于整個(gè)圖像分析輪廓的場(chǎng)景中。

該函數(shù)主要用于檢測(cè)圖像中的輪廓信息,并輸出各個(gè)輪廓之間的結(jié)構(gòu)信息。

函數(shù)的第一個(gè)參數(shù)是待檢測(cè)輪廓的輸入圖像,從理論上講檢測(cè)圖像輪廓需要是二值化圖像,但是該函數(shù)會(huì)對(duì)非0像素視為1,0像素保持不變,因此該參數(shù)能夠接受非二值化的灰度圖像。由于該函數(shù)默認(rèn)二值化操作不能保持圖像主要的內(nèi)容,因此常需要對(duì)圖像進(jìn)行預(yù)處理,利用threshold()函數(shù)或者adaptiveThreshold()函數(shù)根據(jù)需求進(jìn)行二值化。

第二個(gè)參數(shù)用于存放檢測(cè)到的輪廓,數(shù)據(jù)類型為vector,每個(gè)輪廓中存放著屬于該輪廓的像素坐標(biāo)。
函數(shù)的第三個(gè)參數(shù)用于存放各個(gè)輪廓之間的結(jié)構(gòu)信息,數(shù)據(jù)類型為vector,數(shù)據(jù)的尺寸與檢測(cè)到的輪廓數(shù)目相同,每個(gè)輪廓結(jié)構(gòu)信息中第1個(gè)數(shù)據(jù)表示同層下一個(gè)輪廓索引、第2個(gè)數(shù)據(jù)表示同層上一個(gè)輪廓索引、第3個(gè)數(shù)據(jù)表示下一層第一個(gè)子輪廓索引、第4個(gè)數(shù)據(jù)表示上層父輪廓索引。

函數(shù)第四個(gè)參數(shù)是輪廓檢測(cè)模式的標(biāo)志,可以選擇的參數(shù)及含義在表7-2給出。
函數(shù)第五個(gè)參數(shù)是選擇輪廓逼近方法的標(biāo)志,可以選擇的參數(shù)及含義在表7-3給出。
函數(shù)最后一個(gè)參數(shù)是每個(gè)輪廓點(diǎn)移動(dòng)的可選偏移量。這個(gè)函數(shù)主要用在從ROI圖像中找出輪廓并基于整個(gè)圖像分析輪廓的場(chǎng)景中。

只需要檢測(cè)圖像的輪廓,并不關(guān)心輪廓之間的結(jié)構(gòu)關(guān)系信息

void findContours( InputOutputArray image, OutputArrayOfArrays contours,
                              int mode, int method, Point offset = Point());
  • image:輸入圖像,數(shù)據(jù)類型為CV_8U的單通道灰度圖像或者二值化圖像。
  • contours:檢測(cè)到的輪廓,每個(gè)輪廓中存放著像素的坐標(biāo)。
  • mode:輪廓檢測(cè)模式標(biāo)志,可以選擇的參數(shù)在表7-2給出。
  • method:輪廓逼近方法標(biāo)志,可以選擇的參數(shù)在表7-3給出。
  • offset:每個(gè)輪廓點(diǎn)移動(dòng)的可選偏移量。這個(gè)函數(shù)主要用在從ROI圖像中找出輪廓并基于整個(gè)圖像分析輪廓的場(chǎng)景中。

繪制輪廓函數(shù):

void drawContours( InputOutputArray image, InputArrayOfArrays contours,
                              int contourIdx, const Scalar& color,
                              int thickness = 1, int lineType = LINE_8,
                              InputArray hierarchy = noArray(),
                              int maxLevel = INT_MAX, Point offset = Point() );
  • image:繪制輪廓的目標(biāo)圖像。
  • contours:所有將要繪制的輪廓
  • contourIdx:要繪制的輪廓的數(shù)目,如果是負(fù)數(shù),則繪制所有的輪廓。
  • color:繪制輪廓的顏色。
  • thickness:繪制輪廓的線條粗細(xì),如果參數(shù)為負(fù)數(shù),則繪制輪廓的內(nèi)部,默認(rèn)參數(shù)值為1.
  • lineType:邊界線連接的類型,可以選擇參數(shù)在表7-4給出,默認(rèn)參數(shù)值為L(zhǎng)INE_8。
  • hierarchy:可選的結(jié)構(gòu)關(guān)系信息,默認(rèn)值為noArray()。
  • maxLevel:表示用于繪制輪廓的最大等級(jí),默認(rèn)值為INT_MAX。
  • offset:可選的輪廓偏移參數(shù),按指定的移動(dòng)距離繪制所有的輪廓。

該函數(shù)用于繪制findContours()函數(shù)檢測(cè)到的圖像輪廓。
函數(shù)的第一個(gè)參數(shù)為繪制輪廓的圖像,根據(jù)需求該參數(shù)可以是單通道的灰度圖像或者三通道的彩色圖像。
第二個(gè)參數(shù)是所有將要繪制的輪廓,數(shù)據(jù)類型為vector。
第三個(gè)參數(shù)是要繪制的輪廓數(shù)目,該參數(shù)的數(shù)值與第二個(gè)參數(shù)相對(duì)應(yīng),應(yīng)小于所有輪廓的數(shù)目,如果該參數(shù)值為負(fù)數(shù),則繪制所有的輪廓。
第四個(gè)參數(shù)是繪制輪廓的顏色,對(duì)于單通道的灰度圖像用Scalar(x)賦值,對(duì)于三通道的彩色圖像用Scalar(x,y,z)賦值。
第五個(gè)參數(shù)是邊界線的連接類型,可以選擇的參數(shù)在表7-4給出,默認(rèn)參數(shù)值為L(zhǎng)INE_8。
第六個(gè)參數(shù)是可選的結(jié)構(gòu)關(guān)系信息,默認(rèn)值為noArray()。
第七個(gè)參數(shù)表示繪制輪廓的最大等級(jí),參數(shù)值如果為0,則僅繪制指定的輪廓;如果為1,則該函數(shù)繪制輪廓和所有嵌套輪廓;如果為2,則該函數(shù)繪制輪廓以及所有嵌套輪廓和所有嵌套到嵌套輪廓的輪廓,以此類推,默認(rèn)值為INT_MAX。函數(shù)最后一個(gè)參數(shù)是可選的輪廓偏移參數(shù),按指定的移動(dòng)距離繪制所有的輪廓。

簡(jiǎn)單示例

//
// Created by smallflyfly on 2021/6/22.
//
 
#include "opencv2/opencv.hpp"
#include <iostream>
 
using namespace std;
using namespace cv;
 
int main() {
    Mat im = imread("rice.jfif");
    resize(im, im, Size(0, 0), 0.5, 0.5);
    Mat gray;
    cvtColor(im, gray, CV_BGR2GRAY);
 
    Mat imBin;
    threshold(gray, imBin, 125, 255,THRESH_BINARY);
 
    vector<vector<Point>> contours;
    findContours(imBin, contours, RETR_EXTERNAL, CHAIN_APPROX_NONE);
    vector<Vec4i> hierarchy;
    findContours(imBin, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE);
 
    drawContours(im, contours, -1, Scalar(0, 0, 255));
 
    for (auto & i : hierarchy) {
        cout << i << endl;
    }
 
    imshow("im", im);
 
    waitKey(0);
    destroyAllWindows();
 
    return 0;
 
}

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

相關(guān)文章

  • C++實(shí)現(xiàn)當(dāng)前時(shí)間動(dòng)態(tài)顯示的方法

    C++實(shí)現(xiàn)當(dāng)前時(shí)間動(dòng)態(tài)顯示的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)當(dāng)前時(shí)間動(dòng)態(tài)顯示的方法,涉及C++時(shí)間操作及Sleep方法的使用,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C語言中輸入函數(shù)(scanf()、fgets()和gets())的區(qū)別詳解

    C語言中輸入函數(shù)(scanf()、fgets()和gets())的區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于C語言中三種輸入函數(shù)(scanf()、fgets()和gets())區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 詳解C++設(shè)計(jì)模式編程中對(duì)訪問者模式的運(yùn)用

    詳解C++設(shè)計(jì)模式編程中對(duì)訪問者模式的運(yùn)用

    這篇文章主要介紹了C++設(shè)計(jì)模式編程中對(duì)訪問者模式的運(yùn)用,訪問者模式在不破壞類的前提下為類提供增加新的新操作,需要的朋友可以參考下
    2016-03-03
  • Matlab繪制有趣的羅盤時(shí)鐘的示例代碼

    Matlab繪制有趣的羅盤時(shí)鐘的示例代碼

    這篇文章主要介紹了如何利用Matlab實(shí)現(xiàn)繪制有趣的羅盤時(shí)鐘,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定的幫助,需要的可以參考一下
    2023-01-01
  • 關(guān)于C++STL string類的介紹及模擬實(shí)現(xiàn)

    關(guān)于C++STL string類的介紹及模擬實(shí)現(xiàn)

    這篇文章主要介紹了關(guān)于C++STL string類的介紹及模擬實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下面具體的文章內(nèi)容
    2021-09-09
  • C++基于Floyd算法實(shí)現(xiàn)校園導(dǎo)航系統(tǒng)

    C++基于Floyd算法實(shí)現(xiàn)校園導(dǎo)航系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++基于Floyd算法實(shí)現(xiàn)校園導(dǎo)航系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解C++11 變參模板

    詳解C++11 變參模板

    這篇文章主要介紹了C++11 變參模板的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++11,感興趣的朋友可以了解下
    2020-08-08
  • OpenCV實(shí)現(xiàn)輪廓外接多邊形

    OpenCV實(shí)現(xiàn)輪廓外接多邊形

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)輪廓外接多邊形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言實(shí)現(xiàn)圖的最短路徑Floyd算法

    C語言實(shí)現(xiàn)圖的最短路徑Floyd算法

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)圖的最短路徑Floyd算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言深入探究動(dòng)態(tài)規(guī)劃之線性DP

    C語言深入探究動(dòng)態(tài)規(guī)劃之線性DP

    線性動(dòng)態(tài)規(guī)劃,是較常見的一類動(dòng)態(tài)規(guī)劃問題,其是在線性結(jié)構(gòu)上進(jìn)行狀態(tài)轉(zhuǎn)移,這類問題不像背包問題、區(qū)間DP等有固定的模板,線性動(dòng)態(tài)規(guī)劃的目標(biāo)函數(shù)為特定變量的線性函數(shù),約束是這些變量的線性不等式或等式,目的是求目標(biāo)函數(shù)的最大值或最小值
    2022-04-04

最新評(píng)論