openCV连通域的提取与质心标记

这篇具有很好参考价值的文章主要介绍了openCV连通域的提取与质心标记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

openCV的connectedComponentsWithStats函数可以轻松提取黑白图像的连通域,并给出每个连通区质心的位置。
以下图为例
opencv连通域提取,库,opencv,计算机视觉
我们希望提取图片中的两个白色正方体和一个圆形,并标记它们的质量中心。

实现

OpenCV代码如下

#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
    // 设置原始图像
    const int w = 500, h = 500;
    Mat orignImage = Mat::zeros(h, w, CV_8UC1); // 构造一个全黑的单通道图片
    for (int row = 0; row < h; ++row)
    {
        for (int col = 0; col < w; ++col)
        {
            if ((row > 150 && row < 300 && col > 150 && col < 300) || (row > 100 && row < 150 && col > 350 && col < 400) || (row - 400) * (row - 400) + (col - 200) * (col - 200) < 50 * 50) // 将位于这两个正方形和一个圆形区域内的像素设置为白色
            {
                orignImage.at<uint8_t>(row, col) = 255;
            }
        }
    }

    // 生成随机颜色,用于区分不同连通域
    RNG rng(1025);
    Mat out;
    Mat status, centroids;
    int numberOfRegions = connectedComponentsWithStats(orignImage, out, status, centroids, 8, CV_16U); // 统计图像连通域的个数
    vector<Vec3b> colors;                                                                              // 用于储存每个连通区域的颜色(三通道)
    vector<Point2f> points;                                                                            // 用于储存每个连通区域的质心位置
    for (int i = 0; i < numberOfRegions; ++i)
    {
        Vec3b vec3 = Vec3b(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256)); // 给定随机色
        colors.push_back(vec3);
        points.push_back(Point2f(centroids.at<double>(i, 0), centroids.at<double>(i, 1)));
    }

    // 以不同颜色标记出不同的连通域
    Mat colorMap = Mat::zeros(orignImage.size(), CV_8UC3);
    for (int row = 0; row < h; ++row)
    {
        for (int col = 0; col < w; ++col)
        {
            int label = out.at<uint16_t>(row, col);
            if (label == 0) // 背景的黑色不改变
            {
                continue;
            }
            colorMap.at<Vec3b>(row, col) = colors[label];
        }
    }

    // 绘制质心点
    for (int i = 1; i < points.size(); i++)
    {
        circle(colorMap, points[i], 3, Scalar(128, 0, 128), -1); // 画点,其实就是实心圆
    }

    // 显示结果,并输出为bmp位图
    imshow("标记前的图像", orignImage);
    imwrite("origin.bmp", orignImage);
    imshow("标记后的图像", colorMap);
    imwrite("colorMap.bmp", colorMap);
    waitKey(0);
    return 0;
}

其核心代码仅一行

int numberOfRegions = connectedComponentsWithStats(orignImage, out, status, centroids, 8, CV_16U); // 统计图像连通域的个数

该函数输入原始图像orignImage,输出被标记的图像out、统计信息status和质心坐标centroids

效果

opencv连通域提取,库,opencv,计算机视觉
可以看出,代码成功将三个连通区域上色,并标记出了质心位置。

本文参考自:C++版本OpenCv教程(三十八 )图像连通域分析文章来源地址https://www.toymoban.com/news/detail-677976.html

到了这里,关于openCV连通域的提取与质心标记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv特征提取、梯度计算

                                             

    2024年02月11日
    浏览(24)
  • 【OpenCV】OpenCV:计算机视觉的强大工具库

    摘要   OpenCV是一个广泛应用于计算机视觉领域的开源工具库,为开发者提供了丰富的图像处理和计算机视觉算法。本文将介绍OpenCV的功能和应用领域,并探讨它在实践中的重要性和前景。 📕作者简介: 热爱跑步的恒川 ,致力于C/C++、Java、Python等多编程语言,热爱跑步,

    2024年02月03日
    浏览(36)
  • 【OpenCV实现图像找到轮廓的不同特征,就像面积,周长,质心,边界框等等。】

    OpenCV是一个流行的计算机视觉库,它提供了许多图像处理和分析功能,其中包括查找图像中物体的轮廓。通过查找轮廓,可以提取许多有用的特征,如面积、周长、质心、边界框等。 以下是几种使用OpenCV查找轮廓时常见的特征: 面积:可以使用 cv2.contourArea() 函数计算轮廓的

    2024年02月06日
    浏览(39)
  • OpenCV第 1 课 计算机视觉和 OpenCV 介绍

      我们人类可以通过眼睛看到五颜六色的世界,是因为人眼的视觉细胞中存在分别对红、绿、蓝敏感的 3 种细胞。其中的光感色素根据光线的不同进行不同比例的分解,从而让我们识别到各种颜色。   对人工智能而言,学会“ 看 ”也是非常关键的一步。那么机器人是如

    2024年01月24日
    浏览(36)
  • 【计算机视觉 · OpenCV】使用 OpenCV 调用手机摄像头

    Droidcam 是一款可以将手机变成网络摄像头的工具,我们可以利用 Droidcam 让 OpenCV 拥有调用手机摄像头的能力。 2.1 安装 DroidCam 在手机和电脑上分别安装 DroidCam 的客户端和服务端 下载地址:https://pan.baidu.com/s/1DrBn3P1Bx-SXa4d6oziifA?pwd=gr1o 提取码:gr1o 2.2 测试连接状态 手机和电脑需

    2024年02月09日
    浏览(33)
  • OpenCV+OpenCvSharp实现图片特征向量提取与相似度计算

    图片特征向量是一种用于描述图片内容的数学表示,它可以反映图片的颜色、纹理、形状等信息。图片特征向量可以用于做很多事情,比如图片检索、分类、识别等。 本文将介绍图片特征向量的提取以及相似度的计算,并使用C#来实现它们。 文章开始前,我们先来简单了解一

    2024年02月08日
    浏览(30)
  • 计算机视觉:OpenCV相机标定

    针孔照相机模型是一种经典的相机模型,它将相机视为一个针孔,将场景中的点投影到成像平面上。在这个模型中,相机的 内参和外参 描述了相机的几何形状和相机的姿态。 相机的 内参矩阵 描述了相机的内部几何形状,包括相机的焦距、像素尺寸和像素坐标原点。相机的

    2024年01月19日
    浏览(49)
  • 计算机视觉(OpenCV+TensorFlow)

    本系列文章是OpenCV系列文章的第三篇,仍然跟随上篇内容主要聚焦于图像的一些操作 在通常情况下我们使用大小恒定的图像。但在某些情况下,我们需要使用不同分辨率的同幅图像,例如,在搜索图像中的某些内容比如脸部信息时,并不确定该内容在图像中占据的大小。这种

    2024年02月05日
    浏览(34)
  • 【计算机视觉】---OpenCV实现物体追踪

    OpenCV中的物体追踪算法基于视觉目标跟踪的原理。物体追踪的目标是在连续的图像序列中定位和跟踪特定物体的位置。 在物体追踪中,我们需要对目标对象进行表示。通常使用边界框(bounding box)来表示目标的位置和大小。边界框是一个矩形区域,由左上角的坐标(x,y)和

    2024年02月08日
    浏览(41)
  • 【opencv】计算机视觉:实时目标追踪

    目录 前言 解析 深入探究 前言 目标追踪技术对于民生、社会的发展以及国家军事能力的壮大都具有重要的意义。它不仅仅可以应用到体育赛事当中目标的捕捉,还可以应用到交通上,比如实时监测车辆是否超速等!对于国家的军事也具有一定的意义,比如说导弹识别目标等

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包