校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Python OpenCV 基于圖像邊緣提取的輪廓發現函數

Python OpenCV 基于圖像邊緣提取的輪廓發現函數

熱門標簽:西藏智能外呼系統五星服務 千陽自動外呼系統 江蘇客服外呼系統廠家 在哪里辦理400電話號碼 工廠智能電話機器人 400電話申請服務商選什么 原裝電話機器人 清遠360地圖標注方法 平頂山外呼系統免費

基礎知識鋪墊

在圖像中,輪廓可以簡單的理解為連接具有相同顏色的所有連續點(邊界)的曲線,輪廓可用于形狀分析和對象檢測、識別等領域。

輪廓發現的原理:先通過閾值分割提取目標物體,再通過邊緣檢測提取目標物體輪廓。
一個輪廓就是一系列的點(像素),這些點構成了一個有序的點集合。

使用 cv2.findContours 函數可以用來檢測圖像的邊緣。

函數原型說明

contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

我使用的 Python OpenCV 是 4.0 以上版本,如果你使用的是 3.0 以上,可能存在返回值差異問題。
參數說明如下:

  • image:輸入圖像;
  • mode:輪廓檢索模式,具體說明參見后文;
  • method:輪廓逼近方法,具體說明參加后文;
  • contours:返回的輪廓;
  • hierachy:每條輪廓對應的屬性;
  • offset:每個輪廓點移動的可選偏移量。

備注:image 參數需要是二值圖,而不是灰度圖,返回結果是等高線和層次結構。

輪廓檢索模式,有四種

  • cv2.RETR_EXTERNAL:表示只檢測外輪廓;
  • cv2.RETR_LIST:檢測的輪廓,不建立等級關系;
  • cv2.RETR_CCOMP:建立兩個等級的輪廓,上面的一層為外邊界,里面的一層為內孔的邊界信息。如果內孔內還有一個連通物體,這個物體的邊界也在頂層;
  • cv2.RETR_TREE:建立一個等級樹結構的輪廓。上述內容,都可以在該網站查詢:官網地址

輪廓逼近方法

  • cv2.CHAIN_APPROX_NONE:存儲所有的輪廓點,相鄰的兩個點的像素位置差不超過 1,即 max(abs(x1-x2),abs(y2-y1))==1,一般不會用到;
  • cv2.CHAIN_APPROX_SIMPLE:壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點坐標,例如一個矩形輪廓只需 4 個點來保存輪廓信息。
  • cv2.CHAIN_APPROX_TC89_L1cv2.CV_CHAIN_APPROX_TC89_KCOS:使用 teh-Chinl chain 近似算法(沒尋找資料學習)。

了解上述內容之后,就可以應用輪廓發現函數了,代碼如下:

import cv2 as cv

src = cv.imread("./both.jpeg")

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 150, 255, 0)
cv.imshow("thresh",thresh)
# 尋找輪廓
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

輪廓發現之后,還要通過 cv2.drawContours 函數繪制輪廓,該函數原型如下:

image = cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]])

參數說明如下:

  • image:輸入圖像;
  • contours:輪廓,在 Python 中是一個 list,就是 cv2.findContours 函數找出來的點集,一個列表;
  • contourIdx:輪廓的索引,指定繪制輪廓 list 中的哪條輪廓,要繪制所有輪廓,請傳遞-1;color:顏色;
  • thickness:厚度,如果是-1,表示填充;
  • lineType:線型;
  • hierarchy:層次結構的可選信息;
  • maxLevel:繪制輪廓的最大級別,0:僅繪制指定的輪廓,1:繪制輪廓和所有嵌套輪廓,2:繪制輪廓,所有嵌套輪廓,所有嵌套到嵌套的輪廓;
  • offset:輪廓偏移參數。

測試代碼與運行結果如下:

import cv2 as cv
# help(cv.drawContours)
src = cv.imread("./both.jpeg")

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 150, 255, 0)
cv.imshow("thresh",thresh)
# 尋找輪廓
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

# print(contours)
# print(hierarchy)
# 繪制輪廓
cv.drawContours(src,contours,-1,(200,0,150),2)

cv.imshow('src',src)
cv.waitKey(0)

到此這篇關于Python OpenCV 基于圖像邊緣提取的輪廓發現函數的文章就介紹到這了,更多相關OpenCV 邊緣提取輪廓 內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python-opencv在有噪音的情況下提取圖像的輪廓實例
  • Python實現使用卷積提取圖片輪廓功能示例
  • Python圖像處理之目標物體輪廓提取的實現方法

標簽:安慶 西安 天水 隨州 日照 白城 錦州 股票

巨人網絡通訊聲明:本文標題《Python OpenCV 基于圖像邊緣提取的輪廓發現函數》,本文關鍵詞  Python,OpenCV,基于,圖像,邊緣,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python OpenCV 基于圖像邊緣提取的輪廓發現函數》相關的同類信息!
  • 本頁收集關于Python OpenCV 基于圖像邊緣提取的輪廓發現函數的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 从江县| 卓资县| 宝丰县| 革吉县| 墨竹工卡县| 积石山| 永城市| 托里县| 徐水县| 夹江县| 汕头市| 大关县| 英德市| 陆良县| 河源市| 娄烦县| 鹤庆县| 维西| 安仁县| 内乡县| 鄄城县| 轮台县| 屏山县| 准格尔旗| 汉寿县| 阜宁县| 中宁县| 四会市| 河南省| 天峻县| 商水县| 古丈县| 塔城市| 保靖县| 万载县| 金沙县| 靖西县| 图片| 海兴县| 博乐市| 山西省|