日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

OpenCV学习笔记(12)——OpenCV中的轮廓

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV学习笔记(12)——OpenCV中的轮廓 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 什么是輪廓
  • 找輪廓、繪制輪廓等

1.什么是輪廓

  輪廓可看做將連續的點(連著邊界)連在一起的曲線,具有相同的顏色和灰度。輪廓在形態分析和物體的檢測和識別中很有用。

  • 為了更加準確,要使用二值化圖像。在尋找輪廓之前,要進行閾值化處理或者Canny邊界檢測。
  • 查找輪廓的函數會修改原始圖像。如果に在找到輪廓后還想使用原始圖像的話,應該把原始圖像存儲到其他變量中。
  • 在OpenCV中,查找輪廓就像是在黑色背景中找白色物體,要記住要找的物體應該是白色而背景應該是黑色

讓我們看看如何在一個二值圖像中查找輪廓:

  cv2.findContours()有3個參數,第一個是輸入圖像,第二個是輪廓檢索模式,第三個是輪廓近似方法。返回值有三個,第一個是圖像,第二個是輪廓,第三個是(輪廓的)層析結構。第二個返回值輪廓是一個Python列表,其中存儲這圖像中的所有輪廓。每一個輪廓都是一個Numpy數組,包含對象邊界點(x,y)的坐標。

?

2.怎樣繪制輪廓

  cv2.drawContour()可以用來繪制輪廓。你可以根據你提供的邊界點繪制任何形狀。它的第一個參數是原始 圖像,第二個參數是輪廓,一個Python列表。第三個參數是輪廓的索引(在繪制獨立輪廓時相當有用,當設置為-1時將繪制所有輪廓)。接下來的參數是輪廓的顏色,厚度等。

  一下例程在一幅圖中繪制所有的輪廓:

?

# -*- coding:utf-8 -*-

import numpy as np
import cv2
from matplotlib import pyplot as plt

im = cv2.imread('2.jpg')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,200,255,cv2.THRESH_BINARY_INV)
cv2.imshow('img1',thresh)

img,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#以上設置是較為通用的用法,后面會講到一些具體的設置參數
#這一步會把thresh變為輪廓圖,即與img相同;然而不斷試驗并沒發現thresh發生任何變化
#網上有說這個函數只有兩個返回值的,但試過會報錯

cv2.drawContours(im,contours,-1,(0,0,255),1)
#這一步會把輪廓線畫在im中

print(len(contours))#可以看到一共繪制出了多少個輪廓
cv2.imshow('img',im)
cv2.waitKey(0)

效果如下

?

3.輪廓的近似方法

  表示這個設置的是cv2;findCountours()的第三個參數。之前我們提到輪廓是一個形狀具有相同灰度值的邊界,它會存儲形狀邊界上所有的(x,y)坐標。但是需要將這所有的邊界點都存儲么?這就是這個設置參數改變的東西。

  這個參數如果設置為cv2.CHAIN_APPROX_NONE,則所有的邊界點都會被存儲。但是有的時候,比如邊界是一條直線的時候,我們并不需要這么多的點來表示直線,只需要這條直線的端點就夠了。這就是cv2.CHAIN_APPROX_SIMLE做的。它會把輪廓上的冗余點都去掉,以壓縮輪廓節省內存開支。

?

P.S 幾個參數的物理含義

cv2.findCountours():

 輸入的第二個參數表示輪廓的檢索模式,有四種(本文介紹的都是新的cv2接口):
??? cv2.RETR_EXTERNAL表示只檢測外輪廓
??? cv2.RETR_LIST檢測的輪廓不建立等級關系
??? cv2.RETR_CCOMP建立兩個等級的輪廓,上面的一層為外邊界,里面的一層為內孔的邊界信息。如果內孔內還有一個連通物體,這個物體的邊界也在頂層。
??? cv2.RETR_TREE建立一個等級樹結構的輪廓

???

??? 輸出的的參數中,

  hierarchy :這是一個ndarray,其中的元素個數和輪廓個數相同,每個輪廓contours[i]對應4個hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分別表示后一個輪廓、前一個輪廓、父輪廓、內嵌輪廓的索引編號,如果沒有對應項,則該值為負數。

?

轉載于:https://www.cnblogs.com/zodiac7/p/9286531.html

總結

以上是生活随笔為你收集整理的OpenCV学习笔记(12)——OpenCV中的轮廓的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。