本文整理汇总了Python中cv2.CC_STAT_TOP属性的典型用法代码示例。如果您正苦于以下问题:Python cv2.CC_STAT_TOP属性的具体用法?Python cv2.CC_STAT_TOP怎么用?Python cv2.CC_STAT_TOP使用的例子?那么, 这里精选的属性代码示例或许可以为您提供帮助。您也可以进一步了解该属性所在类cv2
的用法示例。
在下文中一共展示了cv2.CC_STAT_TOP属性的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _convert_connection_components
# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import CC_STAT_TOP [as 别名]
def _convert_connection_components(retval, labels, stats, centroids, original_mask):
assert np.amax(labels) == retval - 1
connected_components = [None] * retval
for i in range(retval):
mask = np.array(labels == i, dtype=np.uint8)
stat_for_label = stats[i]
stat_left = stat_for_label[cv2.CC_STAT_LEFT]
stat_top = stat_for_label[cv2.CC_STAT_TOP]
stat_width = stat_for_label[cv2.CC_STAT_WIDTH]
stat_height = stat_for_label[cv2.CC_STAT_HEIGHT]
rect = Rect(stat_left, stat_top, stat_width, stat_height)
centr = centroids[i]
area = _get_area_rect(rect)
num = int(np.sum(original_mask[mask == 1]))
if area > labels.shape[0] * labels.shape[1] / 16:
log.debug("_convert_connection_components: i = {}".format(i))
log.debug("_convert_connection_components: rect = {}".format(rect))
log.debug("_convert_connection_components: centr = {}".format(centr))
log.debug("_convert_connection_components: area = {}".format(area))
log.debug("_convert_connection_components: num = {}".format(num))
component = ConnectedComponent(label_id=i, mask=mask, centroid=centr, rect=rect,
area=area, num=num)
connected_components[i] = component
return connected_components
示例2: getDetBoxes_core
# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import CC_STAT_TOP [as 别名]
def getDetBoxes_core(textmap, linkmap, text_threshold, link_threshold, low_text):
# prepare data
linkmap = linkmap.copy()
textmap = textmap.copy()
img_h, img_w = textmap.shape
""" labeling method """
ret, text_score = cv2.threshold(textmap, low_text, 1, 0)
ret, link_score = cv2.threshold(linkmap, link_threshold, 1, 0)
text_score_comb = np.clip(text_score + link_score, 0, 1)
nLabels, labels, stats, centroids = cv2.connectedComponentsWithStats(text_score_comb.astype(np.uint8), connectivity=4)
det = []
mapper = []
for k in range(1,nLabels):
# size filtering
size = stats[k, cv2.CC_STAT_AREA]
if size < 10: continue
# thresholding
if np.max(textmap[labels==k]) < text_threshold: continue
# make segmentation map
segmap = np.zeros(textmap.shape, dtype=np.uint8)
segmap[labels==k] = 255
segmap[np.logical_and(link_score==1, text_score==0)] = 0 # remove link area
x, y = stats[k, cv2.CC_STAT_LEFT], stats[k, cv2.CC_STAT_TOP]
w, h = stats[k, cv2.CC_STAT_WIDTH], stats[k, cv2.CC_STAT_HEIGHT]
niter = int(math.sqrt(size * min(w, h) / (w * h)) * 2)
sx, ex, sy, ey = x - niter, x + w + niter + 1, y - niter, y + h + niter + 1
# boundary check
if sx < 0 : sx = 0
if sy < 0 : sy = 0
if ex >= img_w: ex = img_w
if ey >= img_h: ey = img_h
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(1 + niter, 1 + niter))
segmap[sy:ey, sx:ex] = cv2.dilate(segmap[sy:ey, sx:ex], kernel)
# make box
np_contours = np.roll(np.array(np.where(segmap!=0)),1,axis=0).transpose().reshape(-1,2)
rectangle = cv2.minAreaRect(np_contours)
box = cv2.boxPoints(rectangle)
# align diamond-shape
w, h = np.linalg.norm(box[0] - box[1]), np.linalg.norm(box[1] - box[2])
box_ratio = max(w, h) / (min(w, h) + 1e-5)
if abs(1 - box_ratio) <= 0.1:
l, r = min(np_contours[:,0]), max(np_contours[:,0])
t, b = min(np_contours[:,1]), max(np_contours[:,1])
box = np.array([[l, t], [r, t], [r, b], [l, b]], dtype=np.float32)
# make clock-wise order
startidx = box.sum(axis=1).argmin()
box = np.roll(box, 4-startidx, 0)
box = np.array(box)
det.append(box)
mapper.append(k)
return det, labels, mapper