background_subtractor.py 文件源码

python
阅读 23 收藏 0 点赞 0 评论 0

项目:AMBR 作者: Algomorph 项目源码 文件源码
def extract_tracked_object(self, image, prev_cc_center):
        contour_found = False
        dist = 0.0
        tracked_px_count = 0
        tracked_object_stats = None
        largest_centroid = None

        mask = self.extract_foreground_mask(image)

        bin_mask = mask.copy()
        bin_mask[bin_mask < MaskLabel.PERSISTENCE_LABEL.value] = 0
        bin_mask[bin_mask > 0] = 1

        labels, stats, centroids = cv2.connectedComponentsWithStats(bin_mask, ltype=cv2.CV_16U)[1:4]

        if len(stats) > 1:
            # initially, just grab the biggest connected component
            ix_of_tracked_component = np.argmax(stats[1:, 4]) + 1
            largest_centroid = centroids[ix_of_tracked_component].copy()
            tracking_ok = True

            if prev_cc_center is not None:
                a = prev_cc_center
                b = largest_centroid
                dist = np.linalg.norm(a - b)
                # check to make sure we're not too far from the previously-detected blob
                if dist > 50:
                    dists = np.linalg.norm(centroids - a, axis=1)
                    ix_of_tracked_component = np.argmin(dists)
                    if dists[ix_of_tracked_component] > ConnectedComponentThreshold.TRACK_DIST_THRESH.value:
                        tracking_ok = False
                    largest_centroid = centroids[ix_of_tracked_component].copy()

            tracked_px_count = stats[ix_of_tracked_component, 4]
            tracked_object_stats = stats[ix_of_tracked_component]
            contour_found = tracked_px_count > ConnectedComponentThreshold.HIDDEN.value and tracking_ok

            if contour_found:
                bin_mask[labels != ix_of_tracked_component] = 0
                mask[bin_mask == 0] = 0
        return mask, bin_mask, contour_found, dist, tracked_px_count, tracked_object_stats, largest_centroid
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号