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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【图像处理】——实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(connectedComponentsWithStats()函数和connectedComponents()函数)

發布時間:2023/12/10 编程问答 24 豆豆

目錄

一、cv2.connectedComponents()

函數原型:

輸入參數解析:

返回參數解析:

二、cv2.connectedComponentsWithStats()

函數原型:

輸入參數解析:

輸出參數解析:

stats參數解析

cv2.rectangle()函數

三、實例


對于一個二值化圖像的后續處理方式有兩種方式,一種是利用cv2.findcontours()函數和cv2.ContourArea()函數對圖像輪廓進行跟蹤,可以得到圖像輪廓的點集合,以及得到各個輪廓的面積值具體可見:

《【圖像處理】——Python+opencv實現二值圖像的輪廓邊界跟蹤以及輪廓面積周長的求解(findcontours函數和contourArea函數)》

????? 另外一種方式就是用函數cv2.connectedComponentsWithStats()和函數cv2.connectedComponents()函數,可以得到輪廓的相關信息

一、cv2.connectedComponents()

函數原型:

retval, labels = connectedComponents(image, labels=None, connectivity=None, ltype=None)

輸入參數解析:

一般指定需要進行標記的目標圖像就行

image:用于標記的8位單通道圖像
labels:標記的目標圖像
connectivity:連通方式:4連通或8連通
Itype:輸出圖像的標記類型,當前只支持CV_32U和CV_16U
?

返回參數解析:

retval:不知道,反正用不上

labels:輸出的是標記圖像,所謂標記圖像就是圖像中每一個連通域都擁有一個標簽(背景的標簽是0),該標簽即代表了此連通域的灰度值。例如,一幅圖像中存在3個連通域(背景除外),那么他們的標簽分別是1、2、3,他們的灰度值分別是1、2、3

二、cv2.connectedComponentsWithStats()

函數原型:

retval, labels, stats, centroids = connectedComponentsWithStats(image, labels=None, stats=None, centroids=None, connectivity=None, ltype=None)

輸入參數解析:

一般指定需要進行標記的目標圖像就行

image:用于標記的8位單通道圖像
labels:標記的目標圖像

stats:含有各個輪廓的外接矩信息和面積的一個參數

centroids:質心
connectivity:連通方式:4連通或8連通
Itype:輸出圖像的標記類型,當前只支持CV_32U和CV_16U

輸出參數解析:

retval:不知道

labels:輸出的標記圖像

stats:這個參數是最有用的,含有一些輪廓的統計信息,一個numpy數組

centroids:每一個輪廓的質心,返回一個numpy數組,計算公式為:

stats參數解析

stats參數是一個numpy數組,每一行代表一個輪廓,每一行固定為5個參數,依次是:

  • CC_STAT_LEFT 組件的左上角點像素點坐標的X位置

  • CC_STAT_TOP 組件的左上角點像素點坐標的Y位置

  • CC_STAT_WIDTH 組件外接矩形的寬度,計算方式為用每一個輪廓中最右邊的點的x坐標減去最左邊的點的x坐標

  • CC_STAT_HEIGHT 組件外接矩形的高度,計算方式為用每一個輪廓中最下邊的點的y坐標減去最上邊的點的y坐標

  • CC_STAT_AREA 當前連通組件的面積(像素單位),這里統計的是輪廓所包含的像素點的個數,不是外接矩形的面積

所以stats的shape為:mx5,m是輪廓的個數,第一個輪廓是背景輪廓,前兩個參數為0,0

注:這里的矩形不一定是最小外接矩形,通過外接矩形我們就可以得到圖像的幾何特征——細長值

最小外接矩形可旋轉圖像得到,在90°范圍內以3°為單位增量恒距離地旋轉圖像,每一次旋轉都計算它的外接矩形的面積值。外接矩形面積達到最小值事,就得到了我們想要的最小外接矩形。即按照3度進行圖像旋轉得到新的圖像,對新的圖像再次進行輪廓的檢測跟蹤以及矩形的繪制,旋轉一周后,取面積最小的矩形即為最小外接矩形

根據以上的stats參數,我們可以繪制的外接矩形,具體如下:

cv2.rectangle()函數

img = rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

img:進行繪制矩形的圖像

pt1:矩形左上角角點坐標,是一個元組

pt2:矩形右下角角點坐標,是一個元組

color:繪制矩形的顏色,一般通過RGB的表示方式(R.G,B)

thickness:繪制矩形的線寬,如果是負數,則將輪廓區域進行填充

linetype:線型

返回的是:繪制后的圖像

. @brief Draws a simple, thick, or filled up-right rectangle.. . The function cv::rectangle draws a rectangle outline or a filled rectangle whose two opposite corners. are pt1 and pt2.. . @param img Image.. @param pt1 Vertex of the rectangle.. @param pt2 Vertex of the rectangle opposite to pt1 .. @param color Rectangle color or brightness (grayscale image).. @param thickness Thickness of lines that make up the rectangle. Negative values, like #FILLED,. mean that the function has to draw a filled rectangle.. @param lineType Type of the line. See #LineTypes. @param shift Number of fractional bits in the point coordinates.

三、實例

代碼:

import cv2 import numpy as npimg_=cv2.imread('rice.png') img=cv2.cvtColor(img_,cv2.COLOR_BGR2GRAY)_, labels, stats, centroids = cv2.connectedComponentsWithStats(img,ltype=cv2.CV_16U)for istat in stats:if istat[3] > istat[4]:r = istat[3]else:r = istat[4]cv2.rectangle(img_, tuple(istat[0:2]), tuple(istat[0:2] + istat[2:4]), (0, 0, 255), thickness=2)cv2.imshow('',img_) cv2.waitKey(0)

?

?

?

總結

以上是生活随笔為你收集整理的【图像处理】——实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(connectedComponentsWithStats()函数和connectedComponents()函数)的全部內容,希望文章能夠幫你解決所遇到的問題。

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