Python + openCV でラベリング&疑似カラー
openCV3 から画像中の連結成分を取得する connectedComponents が実装されたそうですが、実は openCV2 でも distanceTransformWithLabels を使用することで、ほぼ同じことができます。
# -*- coding: utf-8 -*- import cv2 import numpy as np def label_image(img): img_dist, img_label = cv2.distanceTransformWithLabels(255 - img, cv2.cv.CV_DIST_L2, 3) return (np.uint8(img_label) & img) # load binary image img = cv2.imread("label.png", 0) img_label = label_image(img) # access each label label_num = np.max(img_label) for i in range(1, label_num + 1): cv2.imshow("label" + str(i), np.uint8(img_label == i) * 255) # pseudocolor img_label_normal = cv2.normalize(img_label, alpha=0, beta=255, norm_type=cv2.cv.CV_MINMAX) img_label_color = cv2.applyColorMap(img_label_normal, cv2.COLORMAP_JET) cv2.imshow("label", img_label_color) cv2.waitKey(0)
入力画像 label.png
実行結果
なお、openCV2.4 以降では、疑似カラー画像を applyColorMap で一発で作成できます。デプス画像の着色などに便利ですね。