国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

探秘OpenCV中的findContours函數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了探秘OpenCV中的findContours函數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

導(dǎo)言

在計(jì)算機(jī)視覺領(lǐng)域,圖像處理是一項(xiàng)重要的任務(wù)。而在圖像處理的過程中,輪廓(Contours)的提取是一項(xiàng)基礎(chǔ)且關(guān)鍵的操作。OpenCV庫中的findContours函數(shù)就是用于找到圖像中的輪廓的工具之一。本文將深入介紹findContours函數(shù)的作用、原理、應(yīng)用場(chǎng)景,并結(jié)合C++和OpenCV提供一些簡(jiǎn)單的示例代碼,方便讀者入門。

findContours函數(shù)的作用

findContours函數(shù)的主要作用是在二值化圖像中找到輪廓,這些輪廓是由相鄰的像素組成的對(duì)象的邊界。該函數(shù)能夠識(shí)別并返回圖像中所有的輪廓,并以一種易于處理的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)。
findContours函數(shù)詳解
findContours是OpenCV中用于在二值化圖像中查找輪廓的函數(shù)之一。下面詳細(xì)介紹該函數(shù)的原型及參數(shù)作用。

函數(shù)原型

void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point());

參數(shù)說明
image:輸入輸出參數(shù),是二值化的源圖像。在函數(shù)執(zhí)行后,該圖像可能會(huì)被修改,以強(qiáng)調(diào)輪廓。注意,輸入圖像必須是8位單通道圖像。

contours:輸出參數(shù),存儲(chǔ)找到的輪廓的容器。它是一個(gè)向量的向量(vector<vector>),每個(gè)元素都代表一個(gè)輪廓,其中每個(gè)Point表示輪廓上的一個(gè)點(diǎn)。

hierarchy:輸出參數(shù),用于存儲(chǔ)輪廓的層級(jí)信息。它是一個(gè)向量,每個(gè)元素包含了關(guān)于一個(gè)輪廓的層級(jí)關(guān)系,包括下一個(gè)輪廓、上一個(gè)輪廓、子輪廓和父輪廓的索引。

mode:表示輪廓的檢索模式,是一個(gè)整數(shù)值。常見的模式有:

RETR_EXTERNAL:只檢索最外層的輪廓。
RETR_LIST:檢索所有輪廓并存儲(chǔ)為列表。
RETR_CCOMP:檢索所有輪廓并組織為兩層的層級(jí)結(jié)構(gòu)。
RETR_TREE:檢索所有輪廓并完整重構(gòu)輪廓層級(jí)。
method:表示輪廓的逼近方法,同樣是一個(gè)整數(shù)值。常見的方法有:

CHAIN_APPROX_NONE:存儲(chǔ)所有的輪廓點(diǎn),不進(jìn)行任何壓縮。
CHAIN_APPROX_SIMPLE:壓縮水平、垂直和對(duì)角方向,只保留終點(diǎn)。
CHAIN_APPROX_TC89_L1和CHAIN_APPROX_TC89_KCOS:應(yīng)用 Teh-Chin 鏈逼近算法。
offset:可選參數(shù),表示輪廓中所有點(diǎn)的偏移。默認(rèn)為Point(),即無偏移。

函數(shù)作用
findContours函數(shù)的主要作用是根據(jù)給定的模式和方法,在二值化圖像中找到并提取輪廓。以下是各參數(shù)的作用:

image:作為輸入,傳入函數(shù)的二值化圖像。

contours:作為輸出,包含找到的輪廓信息。

hierarchy:作為輸出,包含了輪廓之間的關(guān)系信息,如子輪廓、父輪廓等。

mode:決定了輪廓的檢索模式,即找到哪些輪廓。

method:決定了輪廓的逼近方法,即如何表示輪廓的形狀。

offset:可選參數(shù),用于指定輪廓中所有點(diǎn)的偏移。

通過使用findContours函數(shù),我們可以方便地在圖像中定位并提取感興趣的對(duì)象輪廓,為后續(xù)的圖像處理和分析提供了基礎(chǔ)。

原理分析

findContours函數(shù)的工作原理主要基于圖像的邊緣檢測(cè)和連接分析。它的實(shí)現(xiàn)步驟可以概括為以下幾個(gè)步驟:

圖像預(yù)處理:首先,輸入圖像通常需要進(jìn)行二值化處理,將圖像轉(zhuǎn)換為黑白兩色,以便更容易檢測(cè)輪廓。

邊緣檢測(cè):利用一些邊緣檢測(cè)算法(如Sobel、Canny等),找到圖像中的邊緣。

輪廓查找:根據(jù)邊緣信息,找到輪廓的起點(diǎn),并按照一定規(guī)則遍歷整個(gè)輪廓,將輪廓上的點(diǎn)存儲(chǔ)起來。

輪廓連接:將相鄰的輪廓點(diǎn)連接成完整的輪廓。

存儲(chǔ)結(jié)果:將找到的輪廓以一種數(shù)據(jù)結(jié)構(gòu)(通常是向量)存儲(chǔ),以便后續(xù)使用。

應(yīng)用場(chǎng)景

findContours函數(shù)在許多計(jì)算機(jī)視覺任務(wù)中都得到廣泛應(yīng)用,例如:

目標(biāo)檢測(cè):用于識(shí)別圖像中的物體輪廓,從而進(jìn)行目標(biāo)檢測(cè)。

圖像分割:通過輪廓提取,可以將圖像分割成不同的區(qū)域,有助于進(jìn)一步的分析。

手寫體識(shí)別:在手寫體數(shù)字或字符識(shí)別中,findContours可以用于提取數(shù)字的輪廓。

醫(yī)學(xué)圖像分析:在醫(yī)學(xué)圖像中,該函數(shù)可用于分割和分析組織結(jié)構(gòu)。

代碼示例

使用C++與OpenCV寫代碼
以下是一個(gè)簡(jiǎn)單的C++代碼示例,演示了如何使用OpenCV的findContours函數(shù)來查找并繪制圖像中的輪廓:


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

using namespace cv;
using namespace std;

int main() {
    // 讀取圖像
    Mat image = imread("example.jpg", IMREAD_GRAYSCALE);

    if (image.empty()) {
        cerr << "Unable to read the image" << endl;
        return -1;
    }

    // 二值化圖像
    Mat binaryImage;
    threshold(image, binaryImage, 128, 255, THRESH_BINARY);

    // 查找輪廓
    vector<vector<Point>> contours;
    vector<Vec4i> hierarchy;
    findContours(binaryImage, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);

    // 繪制輪廓
    Mat contourImage = Mat::zeros(image.size(), CV_8UC3);
    drawContours(contourImage, contours, -1, Scalar(0, 255, 0), 2);

    // 顯示原始圖像和帶有輪廓的圖像
    imshow("Original Image", image);
    imshow("Contours", contourImage);

    waitKey(0);

    return 0;
}

在這個(gè)示例中,首先讀取一幅灰度圖像,然后通過二值化處理。接著使用findContours函數(shù)找到圖像中的輪廓,最后使用drawContours函數(shù)將輪廓繪制在一張空白圖像上。最終,通過OpenCV的imshow函數(shù)顯示原始圖像和包含輪廓的圖像。

結(jié)語

通過findContours函數(shù),我們能夠方便地在圖像中找到并提取出對(duì)象的輪廓,為后續(xù)的圖像處理和分析提供了基礎(chǔ)。希望通過本文的介紹和代碼示例,讀者能夠更好地理解并運(yùn)用這一強(qiáng)大的函數(shù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-810878.html

到了這里,關(guān)于探秘OpenCV中的findContours函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • opencv 輪廓檢測(cè) findContours drawContours
  • OpenCV查找和繪制輪廓:findContours和drawContours

    OpenCV查找和繪制輪廓:findContours和drawContours

    1? 任務(wù)描述: 繪制圖中粗線矩形的2個(gè)邊界,并找到其邊界的中心線 圖1 原始圖像 ?2.函數(shù)原型 findContours( InputOutputArray image, OutputArrayOfArrays contours, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OutputArray hierarchy, int mode, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int method, Point offset=Point()); image:圖

    2024年02月07日
    瀏覽(26)
  • opencv-python3 | cv2.findContours()檢測(cè)圖像中物體輪廓

    opencv-python3 | cv2.findContours()檢測(cè)圖像中物體輪廓

    輪廓可以簡(jiǎn)單地理解為連接所有連續(xù)點(diǎn)(沿物體邊界)的曲線,這些點(diǎn)通常具有相同的顏色或強(qiáng)度。 輪廓在圖像分析中具有重要意義,是物體形狀分析和對(duì)象檢測(cè)和識(shí)別的有用工具,是理解圖像語義信息的重要依據(jù)。 通常,為了提高物體輪廓檢測(cè)的準(zhǔn)確率,首先要將彩色圖

    2024年02月05日
    瀏覽(33)
  • 數(shù)字圖像處理【11】OpenCV-Canny邊緣提取到FindContours輪廓發(fā)現(xiàn)

    數(shù)字圖像處理【11】OpenCV-Canny邊緣提取到FindContours輪廓發(fā)現(xiàn)

    本章主要介紹圖像處理中一個(gè)比較基礎(chǔ)的操作:Canny邊緣發(fā)現(xiàn)、輪廓發(fā)現(xiàn) 和 繪制輪廓。概念不難,主要是結(jié)合OpenCV 4.5+的API相關(guān)操作,為往下 \\\"基于距離變換的分水嶺圖像分割\\\" 做知識(shí)儲(chǔ)備。 在講述輪廓之前,要花點(diǎn)時(shí)間學(xué)學(xué)邊緣檢測(cè)提取的一個(gè)著名算法——Canny邊緣提取算法

    2024年02月16日
    瀏覽(24)
  • 【Python】【OpenCV】關(guān)于cv2.findContours()輪廓索引(編號(hào))解析(RETR_TREE)

    【Python】【OpenCV】關(guān)于cv2.findContours()輪廓索引(編號(hào))解析(RETR_TREE)

    在打算自己實(shí)現(xiàn)二維碼的定位的時(shí)候,看到了相關(guān)博文的關(guān)于cv2.findContours返回的層級(jí)信息來定位三個(gè)“回”字從而達(dá)到定位二維碼的目的,但是返回的hierarchy中的層級(jí)信息分別對(duì)應(yīng)的是哪個(gè)輪廓卻困擾了許久,查閱了很多資料最后還是自己手動(dòng)找出了清晰的規(guī)律。 關(guān)于hier

    2024年02月04日
    瀏覽(26)
  • 我在Vscode學(xué)OpenCV 圖像處理四(輪廓查找 cv2.findContours() cv2.drawContours())-- 待補(bǔ)充

    我在Vscode學(xué)OpenCV 圖像處理四(輪廓查找 cv2.findContours() cv2.drawContours())-- 待補(bǔ)充

    在OpenCV中,邊緣檢測(cè)和輪廓查找是兩個(gè)不同的圖像處理任務(wù),它們有不同的目標(biāo)和應(yīng)用。 1.1.1 邊緣檢測(cè): 定義: 邊緣檢測(cè)是指尋找圖像中灰度級(jí)別變化明顯的地方,即圖像中物體之間的界限。這些變化通常表示圖像中的邊緣或輪廓。 方法: 常用的邊緣檢測(cè)算法包括Sobel、

    2024年02月03日
    瀏覽(94)
  • findContours函數(shù)詳細(xì)解析

    findContours函數(shù)詳細(xì)解析

    cnts解析: cnts代表的是找到的輪廓的點(diǎn)集的集合,它是一個(gè)numpy中的列表結(jié)構(gòu)。你也可以把它理解為一個(gè)存儲(chǔ)著圖像中每個(gè)輪廓的數(shù)組,就像這樣: 只不過這個(gè)數(shù)組的每個(gè)位置存儲(chǔ)的是圖片中的一小部分圖像(因?yàn)楫嬕粋€(gè)輪廓只是畫了整個(gè)圖片的一部分,上文提到,畫輪廓是

    2024年02月05日
    瀏覽(23)
  • 【OpenCV findChessboardCornersSB 算法原理與函數(shù)使用】

    【OpenCV findChessboardCornersSB 算法原理與函數(shù)使用】

    findChessboardCornersSB是OpenCV4新引入的棋盤格角點(diǎn)檢測(cè)函數(shù),可以直接獲得亞像素角點(diǎn)坐標(biāo),對(duì)噪聲的魯棒性和對(duì)大尺寸圖像的檢測(cè)速度相比之前的findChessboardCorners有很大提升。本文介紹findChessboardCornersSB函數(shù)的算法原理,并給出函數(shù)使用示例。 findChessboardCornersSB的實(shí)現(xiàn)主要參考

    2024年02月22日
    瀏覽(12)
  • opencv中的幾個(gè)重要函數(shù)

    對(duì)于我們經(jīng)常使用python的同學(xué),尤其還習(xí)慣使用numpy庫,突然上手opencv c++時(shí),就會(huì)感覺想要一個(gè)結(jié)果,python一行代碼搞定,但是c++卻無處下手,因此特總結(jié)遇到的幾個(gè)重要opencv函數(shù),方便能夠快速獲取跟python opencv一樣的效果。 1. compare函數(shù) 2. findNonZero 3. 有待繼續(xù)補(bǔ)充 看到感

    2024年01月24日
    瀏覽(19)
  • OpenCV中的cv::add()函數(shù)

    OpenCV中的cv::add()函數(shù)

    OpenCV是計(jì)算機(jī)視覺和圖像處理領(lǐng)域中廣泛應(yīng)用的開源庫,其中的cv::add()函數(shù)用于對(duì)圖像或數(shù)組進(jìn)行加法運(yùn)算。本文將深入探討cv::add()函數(shù)的基本概念、用法以及在圖像處理中的應(yīng)用,旨在幫助讀者更好地理解和應(yīng)用這一函數(shù)。 在圖像處理和計(jì)算機(jī)視覺任務(wù)中,對(duì)圖像或數(shù)組進(jìn)

    2024年02月22日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包