机器视觉技术分享-Blob分析 含C++ ,python代码说明

在数字图像处理中,Blob分析是一种基于连通性的图像分析方法,用于检测和分析图像中的连通区域。Blob分析可以用于许多应用,例如目标检测、形状识别、运动跟踪等。

在Blob分析中,一个连通区域被称为一个Blob,它可以由一组相邻的像素组成。Blob的特征通常包括面积、周长、重心、最小外接矩形等。Blob分析的基本步骤包括二值化、连通性分析和特征提取等。

以下是使用C++和OpenCV库实现Blob分析的代码示例:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 读取图像
    Mat img = imread("blob.jpg", IMREAD_GRAYSCALE);

    // 二值化
    Mat thresh;
    threshold(img, thresh, 127, 255, THRESH_BINARY);

    // 连通性分析
    Mat labels, stats, centroids;
    int num_labels = connectedComponentsWithStats(thresh, labels, stats, centroids);

    // 特征提取
    for (int i = 1; i < num_labels; i++) {
        int area = stats.at<int>(i, CC_STAT_AREA);
        int x = stats.at<int>(i, CC_STAT_LEFT);
        int y = stats.at<int>(i, CC_STAT_TOP);
        int w = stats.at<int>(i, CC_STAT_WIDTH);
        int h = stats.at<int>(i, CC_STAT_HEIGHT);
        double cx = centroids.at<double>(i, 0);
        double cy = centroids.at<double>(i, 1);
        cout << "Blob " << i << ": area=" << area << ", position=(" << cx << ", " << cy << "), size=(" << w << ", " << h << ")" << endl;
        rectangle(img, Point(x, y), Point(x + w, y + h), Scalar(255, 0, 0), 2);
    }

    // 显示结果
    imshow("Blob Analysis", img);
    waitKey(0);

    return 0;
}

 以下是使用Python和OpenCV库实现Blob分析的代码示例:

import cv2

# 读取图像
img = cv2.imread('blob.jpg', cv2.IMREAD_GRAYSCALE)

# 二值化
thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1]

# 连通性分析
connectivity = 8
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(thresh, connectivity, cv2.CV_32S)

# 特征提取
for i in range(1, num_labels):
    area = stats[i, cv2.CC_STAT_AREA]
    x, y, w, h = stats[i, cv2.CC_STAT_LEFT], stats[i, cv2.CC_STAT_TOP], stats[i, cv2.CC_STAT_WIDTH], stats[i, cv2.CC_STAT_HEIGHT]
    cx, cy = centroids[i]
    print(f'Blob {i}: area={area}, position=({cx}, {cy}), size=({w}, {h})')
    cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

# 显示结果
cv2.imshow('Blob Analysis', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃饼干的熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值