c++ opencv将彩色图像按连通域区分

news2025/4/17 11:00:54

要将彩色图像按连通域区分,您可以使用 OpenCV 中的 cv::connectedComponents 函数。

下面是一个简单的示例代码,说明如何使用 cv::connectedComponents 函数来检测并标记图像中的连通域:

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

int main()
{
    // 读取彩色图像
    cv::Mat image = cv::imread("image.jpg");

    // 将图像转换为灰度
    cv::Mat grayImage;
    cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);

    // 使用二值化将图像转换为二进制图像
    cv::Mat binaryImage;
    cv::threshold(grayImage, binaryImage, 0, 255, cv::THRESH_BINARY_INV | cv::THRESH_OTSU);

    // 定义连通域标记图像
    cv::Mat labels;

    // 应用连通域检测算法
    int numLabels = cv::connectedComponents(binaryImage, labels);

    // 创建随机颜色向量,用于绘制每个连通域
    std::vector<cv::Vec3b> colors(numLabels);
    colors[0] = cv::Vec3b(0, 0, 0); // 背景设置为黑色

    for (int i = 1; i < numLabels; i++)
    {
        colors[i] = cv::Vec3b(rand() % 256, rand() % 256, rand() % 256);
    }

    // 将每个连通域根据其标签值着色
    cv::Mat connectedComponentsImage(image.size(), CV_8UC3);
    for (int y = 0; y < image.rows; y++)
    {
        for (int x = 0; x < image.cols; x++)
        {
            int label = labels.at<int>(y, x);
            cv::Vec3b &color = connectedComponentsImage.at<cv::Vec3b>(y, x);

            color = colors[label];
        }
    }

    // 显示原始图像和标记的连通域图像
    cv::imshow("Original Image", image);
    cv::imshow("Connected Components", connectedComponentsImage);
    cv::waitKey(0);

    return 0;
}

这段代码首先读取彩色图像,然后将其转换为灰度图像。接下来,使用 cv::threshold 函数将灰度图像二值化,生成二进制图像。然后,使用 cv::connectedComponents 函数应用连通域检测算法。最后,根据每个连通域的标签值,使用随机颜色向量对每个连通域进行着色。最后,将原始图像和标记的连通域图像显示出来。

您可以根据您的需求修改此示例代码。

8/29/2023, 2:06:42 PM

smiley

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/944490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能制造产业链数字化转型、数字化互联工厂建设方案PPT

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除&#xff0c;更多浏览公众号&#xff1a;智慧方案文库 篇幅有限&#xff0c;无法完全展示&#xff0c;喜欢资料可转发评论&#xff0c;私信了解更多信息。

初次跑yolo5遇到的一些问题

1. ImportError: cannot import name COMMON_SAFE_ASCII_CHARACTERS‘ from charset-normalizerconstant‘ 这个报错可能是由于charset_normalizer模块的版本问题引起的。尝试更新charset_normalizer模块到最新版本&#xff0c;或者使用较旧的版本&#xff0c;看看是否可以解…

Java 中数据结构HashSet的用法

Java HashSet HashSet 基于 HashMap 来实现的&#xff0c;是一个不允许有重复元素的集合。 HashSet 允许有 null 值。 HashSet 是无序的&#xff0c;即不会记录插入的顺序。 HashSet 不是线程安全的&#xff0c; 如果多个线程尝试同时修改 HashSet&#xff0c;则最终结果是…

Android屏幕显示 android:screenOrientation configChanges

显示相关 屏幕朝向 https://developer.android.com/reference/android/content/res/Configuration.html#orientation 具体区别如下&#xff1a; activity.getResources().getConfiguration().orientation获取的是当前设备的实际屏幕方向值&#xff0c;可以动态地根据设备的旋…

恒运资本:市盈率怎么算?

市盈率&#xff08;P/E ratio&#xff09;是判别一家公司股票价格合理性的一个重要目标&#xff0c;也是投资者评估公司股票投资价值的重要参阅目标。市盈率越高&#xff0c;表明相对于公司的收益来说&#xff0c;该公司的股票定价越高。市盈率越低&#xff0c;则表明该股票被低…

虚拟列表的实现

一、什么是虚拟列表 在传统的列表渲染中&#xff0c;如果列表数据过多&#xff0c;一次性渲染所有数据将耗费大量的时间和内存。当我们上下滚动时&#xff0c;性能低的浏览器或电脑都会感觉到非常的卡&#xff0c;这对用户的体验时是致命的。 于是我们会想到懒加载&#xff0…

如何使用c3p0连接池???

1.首先下载架包。。。&#xff08;下载链接&#xff1a;https://note.youdao.com/ynoteshare/index.html?id61e2cc939390acc9c7e5017907e98044&typenote&_time1693296531722&#xff09; 2.将架包加入项目文件。 创建一个lib目录&#xff0c;将架包复制进去 右键点击l…

ManageEngine ServiceDesk Plus之CVE漏洞

什么是CVE&#xff1f; CVE的英文全称是“Common Vulnerabilities & Exposures”即通用漏洞披露&#xff0c;CVE像是一个字典表&#xff0c;为广泛认同的信息安全漏洞给出一个公共的名称。 使用一个公共名称&#xff0c;可以帮助用户在各自独立的各种漏洞数据库中共享数据…

价格管控的有效措施

品牌为了发展&#xff0c;会不断拓展销售渠道&#xff0c;随之也会有更多的经销商加入&#xff0c;经销商变多了&#xff0c;渠道问题也会逐渐突显&#xff0c;比如低价、窜货、假货&#xff0c;窜货和假货问题其实就是低价问题&#xff0c;所以治理好价格&#xff0c;就是解决…

数据倾斜优化

数据倾斜发生的原因有哪些&#xff1f; map输出数据按key Hash的分配到reduce中&#xff0c;由于key分布不均匀、业务数据本身的特性、建表时考虑不周等原因造成的reduce 上的数据量差异过大。 数据倾斜解决方式有哪些 group by 导致的数据倾斜 1.开启Map-Side聚合后&#x…

MSLearn 开学季:AI 进阶系列|PromptFlow - 做一个教育行业的 Copilot 应用

点击蓝字 关注我们 编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 微软 Reactor 为帮助广开发者&#xff0c;技术爱好者&#xff0c;更好的学习 .NET Core, C#, Python&#xff0c;数据科学&#xff0c;机器学习&#xff0c;AI&#xff0c;区块链, IoT 等技术&#xff0…

美创科技一体化智能化公共数据平台数据安全建设实践

公共数据是当今政府数字化转型的关键要素和未来价值释放的核心锚点&#xff0c;也是“网络强国”、“数字中国”的战略性资源。 作为数字化改革先行省份&#xff0c;近年来&#xff0c;浙江省以一体化智能化公共数据平台作为数字化改革的支撑总平台&#xff0c;实现了全省公共数…

华为云云服务器评测|华为云云耀云服务器L实例评测使用

文章目录 华为云云耀云服务器L实例简介华为云云耀云服务器L实例参数华为云云耀云服务器L实例部署网站的步骤华为云云耀云服务器L实例的核心卖点华为云云耀云服务器L实例适用于多种核心应用场景华为云云耀云服务器L实例总体感受 华为云云耀云服务器L实例简介 华为云云耀云服务器…

解决方案 | 法大大电子签:智慧银行建设背后的“助推器”

随着互联网技术的不断发展&#xff0c;银行业正在经历一场前所未有的数字化革命&#xff0c;平台搭建、场景化金融、在线金融逐渐成为商业银行转型智慧银行的发力点。而电子合同在银行业的广泛应用&#xff0c;为银行业务流程的无纸化、高效能提供了强有力的支持。 聚焦效率及…

高频电流探头的钳口使用和如何调零消磁

高频电流探头采用霍尔效应传感器技术来测量交流和直流信号&#xff0c;标配通用的 BNC 接口&#xff0c;可直接用示波器或记录仪等观察测量波形及数值&#xff0c;具有强大的通用性能。 电流探头钳口使用&#xff1a; 为电流指示方向。测量时&#xff0c;被测导体电流方向与指…

SSM - Springboot - MyBatis-Plus 全栈体系(一)

第一章 Maven 高效构建Java应用&#xff1a;Maven入门和进阶 一、Maven 简介和快速入门 1. Maven 介绍 Maven 是一款为 Java 项目构建管理、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了…

java自动登录 selenium 自动登录并获取cookie

选择操作网页 我用的edge&#xff0c;谷歌我的版本太高没有对应的驱动… 下载Edge的驱动程序&#xff0c;直接解压就好里面只有一个.exe文件 https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ 复制即用&#xff0c;看注释 import com.alibaba.fastjs…

【TI毫米波雷达笔记】毫米波雷达芯片out_of_box开箱demo代码解读(以IWR6843AOP为例)

【TI毫米波雷达笔记】毫米波雷达芯片out_of_box开箱demo代码解读 结构框架&#xff1a; blog.csdn.net/weixin_53403301/article/details/132522364功能 IWR6843AOP的开箱工程是根据IWR6843AOPEVM开发板来的 该工程可以将IWR6843AOP的两个串口利用起来 实现的功能主要是两个…

开学季,“护眼教室”上线,守护孩子光明未来

在关于教室的记忆里&#xff0c;你是否有着这样的滤镜&#xff1f; “电影”滤镜&#xff1a;模糊又遥远&#xff0c;夜间自习像褪色的胶片。 “眩光”滤镜&#xff1a;灯光亮到出现“光环”&#xff0c;看不了多久眼睛就酸胀。 “频闪”滤镜&#xff1a;头顶的灯仿佛飞速眨眼…

Android Mvvm设计模式的详解与实现

一、介绍 在开发设计模式中&#xff0c;模式经历了多次迭代&#xff0c;从MVC到MVP&#xff0c;再到如今的MVVM。发现的过程其实很简单&#xff0c;就是为了项目更好的管理。 设计模式严格来说属于软件工程的范畴&#xff0c;但是如今在各大面试中或者开发中&#xff0c;设计模…