当前位置: 首页 > news >正文

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

要将彩色图像按连通域区分,您可以使用 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.lryc.cn/news/145399.html

相关文章:

  • 〖程序员的自我修养 - 认知剖析篇⑩〗- 学习编程的高效率方法
  • 前端基础1——HTML标记语言
  • 2.1: Dubbo的基本应用-负载均衡,集群容错,服务降级
  • 正则常见问题及解决方案
  • docker发布项目及使用外部文件的情况处理
  • CSS 中哪些属性可以继承
  • vue cli构建的项目出现 Uncaught runtime errors
  • 透过源码理解Flutter InheritedWidget
  • 天去面试的时候,遇到一个问题。我三个任务,ABC,我怎么让A执行完执行B,B执行完执行C 3个并行线程,如何解决。程池的核心运行原理和参数。
  • 使用finksql方式将mysql数据同步到kafka中,每次只能同步一张表
  • ios开发 swift5 苹果系统自带的图标 SF Symbols
  • Linux内核源码分析 (3)调度器的实现
  • 网络安全法+网络安全等级保护
  • 持续集成对软件项目管理的作用
  • 【Qt QAxObject】使用 QAxObject 高效任意读写 Excel 表
  • java八股文面试[多线程]——自旋锁
  • 分布式系统的多数据库,实现分布式事务回滚(1.7.0 seata整合2.0.4nacos)
  • PDF可以修改内容吗?有什么注意的事项?
  • 自动泊车的自动驾驶控制算法
  • Java doc等文件生成PDF、多个PDF合并
  • 【C++】list类的模拟实现
  • 机械臂+2d相机实现复合机器人定位抓取
  • 网络编程 http 相关基础概念
  • LatexEasy公式渲染教程
  • 十年测试工程师叙述自动化测试学习思路
  • SpringAOP详解(下)
  • 主流软件漏洞跟踪 Apache RocketMQ NameServer 远程代码执行漏洞(CVE-2023-37582)
  • Element table根据字段合并表格(可多字段合并),附带拖拽列动态合并
  • C++标准库STL容器详解
  • ParNew垃圾收集器(Serial+多线程)是干什么用的?