[C++] opencv - copyTo函数介绍和使用案例

copyTo函数介绍

copyTo函数是OpenCV库中的一个成员函数,用于将一个Mat对象的内容复制到另一个Mat对象中。

函数原型:

void cv::Mat::copyTo(OutputArray m) const;void cv::Mat::copyTo(OutputArray m, InputArray mask) const;

参数说明:

  • m: 输出数组,即目标Mat对象,用于存储源Mat对象的内容。
  • mask: 图像掩膜,用选定的图像作为遮挡,来控制图像处理的区域;

使用案例

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{// 读取一张图片Mat src = imread("D:/LocalTest/images/beauty_01.jpg");if (src.empty()){cout << "无法读取图片" << endl;return -1;}// 创建一个新的Mat对象,大小为src的2倍,并用黑色来填充,用于存储复制后的内容// 这里需要注意的是,opencv中Mat对象第一个参数为rows,也就是高,第二个参数是cols,也就是宽,和我们平时说的宽x高相反Mat dst = Mat(src.rows, src.cols * 2 , src.type(), Scalar(0, 0, 0));// 将src的内容复制到dst制定的区域,相当于对src进行了水平复制// 这里使用了dst(roi)的方式进行拷贝// roi的定义调用了Mat类的赋值运算符,Mat类中的拷贝构造函数和赋值运算符定义的新Mat对象,都属于浅拷贝,即只为新构造的对象创建新的矩阵头,并将矩阵指针指向对其进行赋值或拷贝的Mat对象像素值存储的位置。也就是说,这种形式新定义的Mat对象,它的像素值和旧Mat对象的像素值,其实是一个矩阵的值,所以对新对象的像素值进行修改,旧的对象的像素值也会变化。src.copyTo(dst(Rect(0, 0, src.cols, src.rows))); // 使用mask来控制只复制比较亮的部分src.copyTo(dst(Rect(src.cols, 0 , src.cols, src.rows)), src > 128 );// 显示原始图片和复制后的图片imshow("原始图片", src);imshow("复制后的图片", dst);// 等待按键,关闭窗口waitKey(0);destroyAllWindows();return 0;
}

在这个例子中,我们首先读取了一张名为"beauty_01.jpg"的图片,并将其内容存储在名为src的Mat对象中。然后,我们创建了一个新的Mat对象dst,并使用copyTo函数将src的内容复制到dst中。最后,我们分别显示了原始图片和复制后的图片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/412308.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言位域定义与使用

参考文章&#xff1a; 【C语言】详解位域定义与使用_c 语言定义位-CSDN博客 代码有修改&#xff0c;主要是变量初始化&#xff0c;原程序可能相应内存不能写。且第二个字节F不好区分各位。 #include <stdio.h>typedef struct {unsigned short b1 : 1;unsigned short b…

rust获取本地外网ip地址的方法

大家好&#xff0c;我是get_local_info作者带剑书生&#xff0c;这里用一篇文章讲解get_local_info的使用。 get_local_info是什么&#xff1f; get_local_info是一个获取linux系统信息的rust三方库&#xff0c;并提供一些常用功能&#xff0c;目前版本0.2.4。详细介绍地址&a…

LeetCode面试题02.07链表相交

力扣题目链接 思想&#xff08;数学&#xff09;&#xff1a;设链表A的长度为a&#xff0c;链表B的长度为b&#xff0c;A到交点D的距离为c&#xff0c;B到交点D的距离为d。显然可以得到两者相交链表的长度为&#xff1a;a - c b - d ,变换一下式子得到&#xff1a;a d b …

高效除甲醛 污染物 光触媒 5nm石墨烯二氧化钛粉CY05S

商品描述 技术指标&#xff1a; 项目 指标 型号 CY05S 粉末外观 蓝黑色粉体 粒径 <5nm 含量 99% 表面性质 亲水 使用方法&#xff1a; 把CY05S粉用蒸馏水&#xff0c;去离子水等&#xff0c;做成固含为1-2%的水溶液&#xff0c;喷涂于墙壁&#xff0c;天花板&a…

什么是身份治理和管理(IGA)

员工的数字身份在组织阶梯内移动时可能会发生变化&#xff0c;将对用户帐户应用与访问相关的修改的过程往往会变得费力且耗时&#xff0c;其强度与组织的人数成正比&#xff0c;为了简化用户身份管理&#xff0c;组织实施了身份治理和管理。 身份治理和管理&#xff08;IGA&am…

Java 方法中参数类型后写了三个点?什么意思?

1、...代表什么意思&#xff1f; 2、如何使用 3、注意事项 4、两个list&#xff0c;一个新的&#xff0c;一个旧的&#xff0c;旧列表中可能有新列表中存在的数据&#xff0c;也可能存在新列表中不存在的数据&#xff08;注&#xff1a;新旧列表中都不存在重复元素&#xff09;…

铝壳电阻有哪些特点和优势?

铝壳电阻是一种常见的电子元件&#xff0c;广泛应用于各种电子设备中。它具有许多特点和优势&#xff0c;使其在众多电阻类型中脱颖而出。以下是铝壳电阻的一些主要特点和优势&#xff1a; 散热性能好&#xff1a;铝壳电阻的外壳采用铝合金材料制成&#xff0c;具有良好的散热性…

什么是技术架构?架构和框架之间的区别是什么?怎样去做好架构设计?(一)

什么是技术架构?架构和框架之间的区别是什么?怎样去做好架构设计?(一)。 在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。在不同的书籍上, 不同的作者, 对于架构的定义也不统一, 角度不同, 定义不同。 一、架构是什么 Linux 有架构,MySQL 有架构,J…

YOLOv8在NX上的tensorrt的加速部署(60帧率)

所需环境 所有过程均可以参考本人所写的文章 (1)虚拟环境工具 MInforge3-Linux-aarch64 Jetson 平台都是RAM架构,平常的conda都是基于X86架构平台的。环境搭建参考文章 (2)YOLOv8_ros代码,采用自己创建的yolov_ros代码。yolov8_ros参考文章 (3)jetpack 环境(本篇文章…

如何运用工业智能网关将数据上传到设备数字化平台

在工业4.0和智能制造的时代背景下&#xff0c;设备数字化平台已经成为了企业实现高效、智能生产的关键。在这个过程中&#xff0c;工业智能网关发挥着至关重要的作用&#xff0c;它们作为连接设备与数字化平台的桥梁&#xff0c;是推动工业自动化的重要力量。 一、工业智能网关…

有什么办法解决vcruntime140_1.dll无法继续执行代码

在使用电脑的过程中你是否遇到过vcruntime140_1.dll丢失的问题&#xff1f;如果给你的电脑提示vcruntime140_1.dll无法继续执行代码&#xff0c;那么这将会影响你的电脑中一些程序&#xff0c;这可能会影响你的电脑正常使用&#xff01;那么有什么办法可以解决vcruntime140_1.d…

linux基础学习(4):rpm包与相关命令

1.linux内的软件包分类 linux只有2种软件包&#xff1a;源码包 与 二进制包 &#xff08;1&#xff09;源码包 源码包就是开源的源程序包&#xff0c;使用者可以直接看到其程序&#xff0c;也可以进行修改 &#xff08;2&#xff09;二进制包 由于源码包安装难度大&#x…