連通域有點像影象分割,可以對著二值圖分割,能返回幾個連通域,起始座標,面積。
感覺和輪廓檢測有點點類似。
引數介紹:
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...