首页 > 其他分享 >OpenCV(cv::Mat::setTo())

OpenCV(cv::Mat::setTo())

时间:2024-09-09 13:24:56浏览次数:16  
标签:Mat 矩阵 OpenCV setTo 图像 掩码 cv

目录



cv::Mat::setTo() 是 OpenCV 中用于将矩阵中的所有元素设置为一个给定的值。它可以应用于整个矩阵,也可以通过掩码 (mask) 仅对部分矩阵进行操作。这个函数常用于图像处理中的多种场景,例如图像填充、区域修改等。

1. 函数定义

Mat& Mat::setTo(const Scalar& value, InputArray mask = noArray());

参数:

  • value: 这是一个 cv::Scalar 值,它指定要设置的值。Scalar 可以是一个多通道值,因此可以用于设置彩色图像的像素值。
  • mask: 可选参数。它是一个与矩阵大小相同的单通道二值掩码(mask)。只有掩码中非零的元素对应的矩阵位置会被设置为指定的值。如果不提供掩码,函数会对整个矩阵的所有元素应用操作。

返回值:

  • 返回引用的是原矩阵,应用完设置操作后的矩阵本身。


2. 示例

  1. 应用于整个矩阵

    cv::Mat img = cv::Mat::zeros(300, 300, CV_8UC3); // 创建一个黑色的 300x300 彩色图像
    img.setTo(cv::Scalar(0, 255, 0)); // 将图像所有像素设置为绿色
    
  2. 使用掩码进行部分设置

    cv::Mat img = cv::Mat::zeros(300, 300, CV_8UC3); // 创建一个黑色的 300x300 彩色图像
    cv::Mat mask = cv::Mat::zeros(300, 300, CV_8UC1); // 创建一个黑色的掩码
    mask(cv::Rect(100, 100, 100, 100)) = 255; // 掩码中一个 100x100 区域设置为白色
    img.setTo(cv::Scalar(0, 0, 255), mask); // 仅将掩码区域的图像像素设置为红色
    


3. 使用场景

  • 图像填充: 可以使用 setTo() 快速将整幅图像或某个区域填充为指定的颜色或灰度值。
  • 掩码操作: 结合掩码,可以对图像的某些特定区域进行修改,而不影响其他区域。这种操作在图像分割、区域感兴趣(ROI)处理等场景中非常有用。
  • 初始化图像: 在初始化图像时,例如创建一幅全零图像或者全特定颜色的图像时,setTo() 是一个简便的工具。


4. 性能

setTo() 的性能非常高效,因为它是通过 SIMD(Single Instruction Multiple Data) 指令集进行矩阵操作的,因此非常适合处理大规模图像数据。



5. 注意事项

  • 当使用掩码时,掩码必须是单通道的图像,并且其大小应与目标矩阵的大小一致。
  • cv::Scalar 是一个四通道的容器,即使对于单通道图像,它的未使用通道也需要显式设置为零。

总结来说,cv::Mat::setTo() 是一个功能强大且灵活的函数,用于快速设置矩阵中的元素,并可以与掩码结合以实现复杂的区域处理。



标签:Mat,矩阵,OpenCV,setTo,图像,掩码,cv
From: https://www.cnblogs.com/keye/p/18404366

相关文章

  • vulhub spring 远程命令执行漏洞(CVE-2016-4977)
    步骤一:执行以下命令启动靶场环境并在浏览器访问cd/vulhub/spring/CVE-2016-4977#进入漏洞环境所在目录docker-compose up-d#启动靶场 docker ps#查看容器信息步骤二:访问环境步骤三:192.168.0.107:8080/oauth/authorize?response_type=${2*2}&client_id=acme&scope=o......
  • YOLOv8改进实战 | 注意力篇 | 引入ICCV2023顶会LSKNet:大选择性卷积注意力模块LSKA,助力
    YOLOv8专栏导航:点击此处跳转前言YOLOv8是由YOLOv5的发布者Ultralytics发布的最新版本的YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括CPU和GPU在内的各种硬件上执行。YOLOv8是一种尖端的、最先进的(SOTA)模型,它建立在以前......
  • EmguCV学习笔记 VB.Net 9.3 移动检测类
    版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。教程VB.net版本请访问:EmguCV学习笔记VB.Net目录-CSDN博客......
  • opencv-python学习笔记2-opencv基本操作
    目录 一、opencv架构:(1)OpenCV的主要模块包括:(2)OpenCV的架构特点:(3)OpenCV的应用场景:二、图像输入输出模块imgcodecs: a.imread:b. imwrite:三、opencv界面编程:(1)创建窗口:(2)显示图像:(3)添加滑块:(4)处理鼠标事件:(5)等待用户输入(6)销毁窗口四、单窗口显示多图片:(1)np.hstack()......
  • 传统CV算法——基于Opencv的图像绘制
    直线绘制参数解析:(图像矩阵,直线起始坐标,直线终止坐标、颜色、线条厚度)cv2.line()是OpenCV中用于绘制直线的函数。参数说明:img:要绘制直线的图像矩阵。(100,30):直线的起点坐标。(210,180):直线的终点坐标。color:直线的颜色,三个值分别表示蓝色、绿色和红色通道的强度。这里(......
  • 探索EasyCVR与AI技术深度融合:视频汇聚平台的新增长点
    随着5G、AI、边缘计算、物联网(IoT)、云计算等技术的快速发展,万物互联已经从概念逐渐转变为现实,AIoT(物联网人工智能)的新时代正在加速到来。在这一背景下,视频技术作为信息传输和交互的重要手段,其重要性日益凸显。旭帆科技EasyCVR视频汇聚平台,作为一款基于云-边-端一体化架构的视频融......
  • 防患于未然,智能监控新视角:EasyCVR视频平台在高校安全防控中的关键角色
    有网民发视频称,某大学食堂内发生争执打斗事件。一男一女两名学生疑似因座位问题发生争执,女子被打倒在地。此事引发网友关注。高校食堂作为师生日常用餐的聚集地,人员密集且流动性大,极易因排队、价格、口味等问题引发争执,甚至升级为打斗事件。这些事件不仅破坏了校园和谐氛围,还可能......
  • Nacos 认证绕过漏洞(CVE-2021-29441)
    相关介绍Nacos是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。小知识:Nacos初始用户......
  • 基于人工智能实验平台的OpenCV图片基础操作实践
    opencv图片基础操作之图片读取/保存/显示1.1实验目的熟悉opencv读入图片,存储图片,视频的读取、存储。1.2实验设备安装了python和pychrm的电脑一台。1.3实验内容包含图片的导入、存储,摄像头视频的读取、存储等。1.4实验原理读/写图像文件OpenCV的imread()函数和im......
  • R-Adapter:零样本模型微调新突破,提升鲁棒性与泛化能力 | ECCV 2024
    大规模图像-文本预训练模型实现了零样本分类,并在不同数据分布下提供了一致的准确性。然而,这些模型在下游任务中通常需要微调优化,这会降低对于超出分布范围的数据的泛化能力,并需要大量的计算资源。论文提出新颖的RobustAdapter(R-Adapter),可以在微调零样本模型用于下游任务的同时解......