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


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

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

    1. #include <opencv2/opencv.hpp>
    2. #include <iostream>
    3. int main()
    4. {
    5. // 读取彩色图像
    6. cv::Mat image = cv::imread("image.jpg");
    7. // 将图像转换为灰度
    8. cv::Mat grayImage;
    9. cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);
    10. // 使用二值化将图像转换为二进制图像
    11. cv::Mat binaryImage;
    12. cv::threshold(grayImage, binaryImage, 0, 255, cv::THRESH_BINARY_INV | cv::THRESH_OTSU);
    13. // 定义连通域标记图像
    14. cv::Mat labels;
    15. // 应用连通域检测算法
    16. int numLabels = cv::connectedComponents(binaryImage, labels);
    17. // 创建随机颜色向量,用于绘制每个连通域
    18. std::vector<cv::Vec3b> colors(numLabels);
    19. colors[0] = cv::Vec3b(0, 0, 0); // 背景设置为黑色
    20. for (int i = 1; i < numLabels; i++)
    21. {
    22. colors[i] = cv::Vec3b(rand() % 256, rand() % 256, rand() % 256);
    23. }
    24. // 将每个连通域根据其标签值着色
    25. cv::Mat connectedComponentsImage(image.size(), CV_8UC3);
    26. for (int y = 0; y < image.rows; y++)
    27. {
    28. for (int x = 0; x < image.cols; x++)
    29. {
    30. int label = labels.at<int>(y, x);
    31. cv::Vec3b &color = connectedComponentsImage.at<cv::Vec3b>(y, x);
    32. color = colors[label];
    33. }
    34. }
    35. // 显示原始图像和标记的连通域图像
    36. cv::imshow("Original Image", image);
    37. cv::imshow("Connected Components", connectedComponentsImage);
    38. cv::waitKey(0);
    39. return 0;
    40. }

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

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

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

    smiley

     

  • 相关阅读:
    大学生静态HTML网页源码——佛山旅游景点介绍网页代码 家乡旅游网页制作模板 web前端期末大作业
    cka/ckad应试指南 从docker到kubernetes完全攻略
    23. 请你谈谈关于IO同步、异步、阻塞、非阻塞的区别
    堆(完全二叉树的一种) 模拟
    SQLite FTS5 扩展(三十)
    阿里云对象存储OSS服务开通
    TRex学习之旅三
    查询数据库DQL
    集合源码解析:LinkedList 精讲
    计算机网络 0815
  • 原文地址:https://blog.csdn.net/a1194110603/article/details/132564550