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

OpenCV CUDA模块图像处理------图像连通域标记接口函数connectedComponents()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

该函数在 GPU 上执行二值图像的连通域标记操作,即将图像中所有相连的前景像素区域赋予相同的标签(label),以便后续分析和处理。
返回的 labels 是一个与输入图像大小相同的数据矩阵,其中每个像素的值表示它所属的连通域编号(从 0 开始)。

该函数接收一个二值图像作为输入,并执行连通组件标记(Connected Components Labeling)。输出是一个为每个连通组件分配了唯一标签(整数值)的图像。ltype指定了输出标签图像的类型,这是基于总标签数或源图像中的总像素数的重要考虑因素。ccltype指定了要使用的连通组件标记算法,当前支持BKE [11]算法,详情请参见ConnectedComponentsAlgorithmsTypes。请注意,输出中的标签不需要是连续的。

函数原型

void cv::cuda::connectedComponents 
(InputArray  	image,OutputArray  	labels,int  	connectivity,int  	ltype,cv::cuda::ConnectedComponentsAlgorithmsTypes  	ccltype 
) 	

参数

  • image:需要被标记的8位单通道图像。
  • labels:目标标记图像。
  • connectivity:用于标记过程的连通性。支持使用8表示8向连通性。
  • ltype:输出图像标签类型。当前支持CV_32S。
  • ccltype:连通组件算法类型(详见ConnectedComponentsAlgorithmsTypes)。

注意:一个演示如何在CUDA中实现连通组件标记的示例程序可以在opencv_contrib_source_code/modules/cudaimgproc/samples/connected_components.cpp找到。

代码示例

#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>int main()
{// Step 1: 加载图像并转换为二值图像cv::Mat h_img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/stich1.png", cv::IMREAD_GRAYSCALE );if ( h_img.empty() ){std::cerr << "Failed to load image!" << std::endl;return -1;}// 将灰度图像二值化cv::threshold( h_img, h_img, 128, 255, cv::THRESH_BINARY );// Step 2: 将图像上传到 GPUcv::cuda::GpuMat d_img, d_labels;d_img.upload( h_img );// Step 3: 执行连通域标记int connectivity = 8;       // 使用 8 连通int ltype        = CV_32S;  // 输出标签类型为 32 位整型// 确保使用的算法类型是有效的cv::cuda::ConnectedComponentsAlgorithmsTypes ccltype = cv::cuda::CCL_DEFAULT;cv::cuda::connectedComponents( d_img, d_labels, connectivity, ltype, ccltype );// Step 4: 下载结果并显示cv::Mat h_labels;d_labels.download( h_labels );// 可视化:将标签映射为颜色cv::Mat coloredLabels;h_labels.convertTo( coloredLabels, CV_8U, 255.0 / cv::countNonZero( h_labels ) );  // 正常化标签值到[0, 255]// 应用伪色彩映射cv::applyColorMap( coloredLabels, coloredLabels, cv::COLORMAP_JET );cv::imshow( "Original Image", h_img );cv::imshow( "Connected Components", coloredLabels );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

http://www.lqws.cn/news/115237.html

相关文章:

  • 设计模式之单例模式(二): 心得体会
  • Spring AI 之工具调用
  • Spitfire:Codigger 生态中的高性能、安全、分布式浏览器
  • 电网“逆流”怎么办?如何实现分布式光伏发电全部自发自用?
  • 6.04打卡
  • mac 设置cursor (像PyCharm一样展示效果)
  • 【C/C++】析构函数好玩的用法:~Derived() override
  • unix/linux,sudo,其内部结构机制
  • 09.MySQL内外连接
  • 【Linux仓库】冯诺依曼体系结构与操作系统【进程·壹】
  • 理解网络协议
  • 【免费】酒店布草洗涤厂自动统计管理系统(1)——智能编程——仙盟创梦IDE
  • Java SpringBoot 调用大模型 AI 构建智能应用实战指南
  • 记一次运行spark报错
  • RabbitMQ 开机启动配置教程
  • 在compose中的Canvas用kotlin显示多数据波形闪烁的问题
  • 中电金信:从智能应用到全栈AI,大模型如何重构金融业务价值链?
  • 数据结构第八章(一) 插入排序
  • 目标检测任务的评估指标P-R曲线
  • 【学习记录】如何使用 Python 提取 PDF 文件中的内容
  • 【C语言】通用统计数据结构及其更新函数(最值、变化量、总和、平均数、方差等)
  • 服务定位器模式在嵌入式系统中应用实现
  • 在虚拟宇宙中低语——进程间通信,Linux命名管道的前世今生
  • 【Linux】进程 信号保存 信号处理 OS用户态/内核态
  • 力扣面试150题--岛屿数量
  • 【位运算】丢失的数字(easy)
  • linux操作系统---网络协议
  • 【开源工具】基于PyQt5工作时长计算器工具开发全解析
  • Appium如何支持ios真机测试
  • 宝塔使用docker创建n8n