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

OpenCV CUDA模块中逐元素操作------逻辑运算

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

算法描述

比较、AND、OR、NOT等。这类操作可用于创建基于条件的掩码,这对于图像分割或特征选择非常有用。

主要函数

1. 按位与 (cv::cuda::bitwise_and)

功能: 对两个矩阵执行逐元素按位与操作。

函数原型
void cv::cuda::bitwise_and
(InputArray src1,        // 第一个输入矩阵或标量InputArray src2,        // 第二个输入矩阵或标量OutputArray dst,       // 输出矩阵const GpuMat& mask = GpuMat(), // 可选掩码矩阵Stream& stream = Stream::Null() // 可选CUDA流
);
参数介绍:
  • src1: 输入的第一个矩阵或标量。
  • src2: 输入的第二个矩阵或标量。
  • dst: 输出的结果矩阵。
  • mask: 可选的掩码矩阵,用于指定哪些像素参与计算,默认为空(不使用掩码)。
  • stream: CUDA流对象,用于控制操作的异步执行,默认为同步执行。

2. 按位或 (cv::cuda::bitwise_or)

功能: 对两个矩阵执行逐元素按位或操作。

函数原型
void cv::cuda::bitwise_or
(InputArray src1,InputArray src2,OutputArray dst,const GpuMat& mask = GpuMat(),Stream& stream = Stream::Null()
);
参数
  • src1: 输入的第一个矩阵或标量。
  • src2: 输入的第二个矩阵或标量。
  • dst: 输出的结果矩阵。
  • mask: 可选的掩码矩阵,用于指定哪些像素参与计算,默认为空(不使用掩码)。
  • stream: CUDA流对象,用于控制操作的异步执行,默认为同步执行。

3. 按位非 (cv::cuda::bitwise_not)

功能: 对单个矩阵执行逐元素按位非操作。

函数原型
void cv::cuda::bitwise_not
(InputArray src,        // 输入矩阵OutputArray dst,       // 输出矩阵const GpuMat& mask = GpuMat(), // 可选掩码矩阵Stream& stream = Stream::Null() // 可选CUDA流
);
参数介绍
  • src: 输入的矩阵。
  • dst: 输出的结果矩阵。
  • mask: 可选的掩码矩阵,用于指定哪些像素参与计算,默认为空(不使用掩码)。
  • stream: CUDA流对象,用于控制操作的异步执行,默认为同步执行。

4. 按位异或 (cv::cuda::bitwise_xor)

功能: 对两个矩阵执行逐元素按位异或操作。

函数原型

void cv::cuda::bitwise_xor
(InputArray src1,InputArray src2,OutputArray dst,const GpuMat& mask = GpuMat(),Stream& stream = Stream::Null()
);
参数介绍
  • src1: 输入的第一个矩阵或标量。
  • src2: 输入的第二个矩阵或标量。
  • dst: 输出的结果矩阵。
  • mask: 可选的掩码矩阵,用于指定哪些像素参与计算,默认为空(不使用掩码)。
  • stream: CUDA流对象,用于控制操作的异步执行,默认为同步执行。

示例代码

以下是一个综合示例,展示了如何使用这些逻辑运算函数,并包含了所有参数的使用:


#include <opencv2/cudaarithm.hpp>  // 包含CUDA算术和逻辑运算头文件
#include <opencv2/opencv.hpp>int main()
{// 创建两个输入矩阵cv::Mat h_src1 = ( cv::Mat_< uchar >( 3, 3 ) << 1, 0, 1, 0, 1, 0, 1, 0, 1 );  // 第一个输入矩阵cv::Mat h_src2 = ( cv::Mat_< uchar >( 3, 3 ) << 0, 1, 0, 1, 0, 1, 0, 1, 0 );  // 第二个输入矩阵// 将它们上传到GPUcv::cuda::GpuMat d_src1, d_src2;d_src1.upload( h_src1 );d_src2.upload( h_src2 );// 定义输出矩阵cv::cuda::GpuMat d_dst;// 按位与操作cv::cuda::bitwise_and( d_src1, d_src2, d_dst );cv::Mat h_bitwise_and;d_dst.download( h_bitwise_and );std::cout << "Result (Bitwise AND):\n" << h_bitwise_and << std::endl;// 按位或操作cv::cuda::bitwise_or( d_src1, d_src2, d_dst );cv::Mat h_bitwise_or;d_dst.download( h_bitwise_or );std::cout << "Result (Bitwise OR):\n" << h_bitwise_or << std::endl;// 按位非操作cv::cuda::bitwise_not( d_src1, d_dst );cv::Mat h_bitwise_not;d_dst.download( h_bitwise_not );std::cout << "Result (Bitwise NOT on src1):\n" << h_bitwise_not << std::endl;// 按位异或操作cv::cuda::bitwise_xor( d_src1, d_src2, d_dst );cv::Mat h_bitwise_xor;d_dst.download( h_bitwise_xor );std::cout << "Result (Bitwise XOR):\n" << h_bitwise_xor << std::endl;return 0;
}

运行结果

Result (Bitwise AND):
[  0,   0,   0;0,   0,   0;0,   0,   0]
Result (Bitwise OR):
[  1,   1,   1;1,   1,   1;1,   1,   1]
Result (Bitwise NOT on src1):
[254, 255, 254;255, 254, 255;254, 255, 254]
Result (Bitwise XOR):
[  1,   1,   1;1,   1,   1;1,   1,   1]
http://www.xdnf.cn/news/442855.html

相关文章:

  • 代码随想录算法训练营第四十天
  • ubuntu24.04上安装NVIDIA driver+CUDA+cuDNN+Anaconda+Pytorch
  • Webpack其他插件
  • Emacs 折腾日记(二十三)——进一步提升编辑效率
  • Docker 疑难杂症解决指南:从入门到进阶的全面剖析
  • 第五章 LVGL 字库使用
  • 【测试】BUG
  • 深度理解指针(2)
  • map格式可以接收返回 fastjson2格式的数据 而不需要显示的转换
  • 占位符读取标准输入缓冲区规则
  • WEB安全--Java安全--CC1利用链
  • 生成式人工智能认证(GAI认证)官网 - 全国统一认证中文服务平台上线
  • [python] python中的魔法方法和属性
  • 【Python 异常处理】
  • 【c语言内存函数】
  • Kuka AI音乐AI音乐开发「人声伴奏分离」 —— 「Kuka Api系列|中文咬字清晰|AI音乐API」第6篇
  • 梯度优化提示词:模型生成精准回答的秘密
  • libmemcached库api接口讲解四
  • 反向搭理搭建于网络安全的分层关系讨论
  • 计算机网络-MPLS VPN基础概念
  • FlashInfer - 测试的GPU H100 SXM、A100 PCIe、RTX 6000 Ada、RTX 4090
  • 具身智能梳理以及展望
  • React Flow 简介:构建交互式流程图的最佳工具
  • 如何远程执行脚本不留痕迹
  • MCU ESP32-S3+SD NAND(贴片式T卡):智能皮电手环(GSR智能手环)性能与存储的深度评测
  • MoonBit正式入驻GitCode!AI时代的编程语言新星,开启高性能开发新纪元
  • LVS负载均衡群集和keepalive
  • Canvas知识框架
  • CSP信奥赛新增的算法-马拉车算法(Manacher‘s Algorithm)
  • 使用 Semantic Kernel 调用 Qwen-VL 多模态模型