opencv 連通域筆記

2021-10-22 13:35:04 字數 2163 閱讀 3530

連通域有點像影象分割,可以對著二值圖分割,能返回幾個連通域,起始座標,面積。

感覺和輪廓檢測有點點類似。

引數介紹:

1.3cv2.connectedcomponentswithstats()

這個函式的作用是對一幅影象進行連通域提取,並返回找到的連通域的資訊:retval、labels、stats、centroids

num_labels, labels, stats, centroids = cv2.connectedcomponentswithstats(image, connectivity=8, ltype=none)

1引數介紹如下:

image:也就是輸入影象,必須是二值圖,即8位單通道影象。(因此輸入影象必須先進行二值化處理才能被這個函式接受)

connectivity:可選值為4或8,也就是使用4連通還是8連通。

ltype:輸出影象標記的型別,目前支援cv_32s 和 cv_16u。 返回值:

返回值:

num_labels:所有連通域的數目

labels:影象上每一畫素的標記,用數字1、2、3…表示(不同的數字表示不同的連通域)

stats:每乙個標記的統計資訊,是乙個5列的矩陣,每一行對應每個連通區域的外接矩形的x、y、width、height和面積,示例如下: 0 0 720 720 291805

centroids:連通域的中心點

這個也可以:

ret, markers = cv2.connectedcomponents(bin_clo)
bin_clo是二值圖

import cv2

import numpy as np

# 讀入

# 中值濾波,去噪

img = cv2.medianblur(img, 3)

gray = cv2.cvtcolor(img, cv2.color_bgr2gray)

cv2.namedwindow('original', cv2.window_autosize)

cv2.imshow('original', gray)

# 閾值分割得到二值化

ret, binary = cv2.threshold(gray, 0, 255, cv2.thresh_binary | cv2.thresh_otsu)

# 膨脹操作

kernel2 = cv2.getstructuringelement(cv2.morph_rect, (3, 3))

bin_clo = cv2.dilate(binary, kernel2, iterations=2)

# 連通域分析

num_labels, labels, stats, centroids = cv2.connectedcomponentswithstats(bin_clo, connectivity=8)

# 檢視各個返回值

# 連通域數量

print('num_labels = ',num_labels)

# 連通域的資訊:對應各個輪廓的x、y、width、height和面積

print('stats = ',stats)

# 連通域的中心點

print('centroids = ',centroids)

# 每乙個畫素的標籤1、2、3.。。,同乙個連通域的標籤是一致的

print('labels = ',labels)

# 不同的連通域賦予不同的顏色

output = np.zeros((img.shape[0], img.shape[1], 3), np.uint8)

for i in range(1, num_labels):

mask = labels == i

output[:, :, 0][mask] = np.random.randint(0, 255)

output[:, :, 1][mask] = np.random.randint(0, 255)

output[:, :, 2][mask] = np.random.randint(0, 255)

cv2.imshow('oginal', output)

cv2.waitkey()

cv2.destroyallwindows()

opencv實現連通域

文章 在本文中使用影象連通域統計使用opencv中的cvfloodfill方法,但是在cvfloodfill方法中cvconnectedcomp引數無法返回具體點座標位置資訊,找了些資料 給cvseq分配空間但是還是contour內容沒有值,估計是opencv2.00版本不支援。如果想獲取點座標資訊...

opencv實現連通域

在本文中使用影象連通域統計使用opencv中的cvfloodfill方法,但是在cvfloodfill方法中cvconnectedcomp引數無法返回具體點座標位置資訊,找了些資料 給cvseq分配空間但是還是contour內容沒有值,估計是opencv2.00版本不支援。如果想獲取點座標資訊有兩種...

opencv實現連通域

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!在本文中使用影象連通域統計使用opencv中的cvfloodfill方法,但是在cvfloodfill方法中cvconnectedcomp引數無法返回具體點座標位置資訊,找了些資料 給cvseq分配空間但是還是contour內容沒有值,估計是ope...