C++ Opencv之图像数据拷贝分析

server/2024/11/9 16:45:11/
  • 本文承接https://blog.csdn.net/yohnyang/article/details/130367802
  • 总结一下在使用Opencv中图像矩阵Mat数据赋值时的内存拷贝字节

测试代码C++

#include<iostream>
#include<opencv2/opencv.hpp>void main()
{//cv::Mat A = (cv::Mat_<float>(3, 3) << 1, 0, 0, 0, 1, 1, 0, 0, 1);int wh = 1200;cv::Mat A = cv::Mat(wh, wh, CV_8UC1, cv::Scalar::all(128));cv::Mat B, C;#if 1auto t0 = cv::getTickCount();B = A;B.at<float>(1, 1) = 8;auto t1 = cv::getTickCount();auto t01 = float(t1 - t0) / cv::getTickFrequency() * 1000;std::cout << cv::format("直接赋值耗时:%.2f ms\n", t01);#endift0 = cv::getTickCount();C = A.clone();C.at<float>(1, 1) = 8;t1 = cv::getTickCount();t01 = float(t1 - t0) / cv::getTickFrequency() * 1000;std::cout << cv::format("图像clone耗时:%.2f ms\n", t01);t0 = cv::getTickCount();//unsigned char* buffer = new unsigned char[A.rows * A.cols * A.channels()];//针对8通道可以,float或者double另行讨论cv::Mat D = cv::Mat(A.size(), A.type());memcpy(D.data, A.data, A.rows * A.cols * A.channels());t1 = cv::getTickCount();t01 = float(t1 - t0) / cv::getTickFrequency() * 1000;std::cout << cv::format("memcpy耗时:%.2f ms\n", t01);std::cout << "go!\n";}
  • 输出:
直接赋值耗时:0.00 ms
图像clone耗时:0.76 ms
memcpy耗时:0.51 ms
  • 若把图像大小设为3000,则 差距就很明显了
int wh = 3000;
cv::Mat A = cv::Mat(wh, wh, CV_8UC1, cv::Scalar::all(128));
  • 结果如下:
直接赋值耗时:0.00 ms
图像clone耗时:4.84 ms
memcpy耗时:2.53 ms

http://www.ppmy.cn/server/38008.html

相关文章

【xxl-job | 第三篇】SpringBoot整合xxl-job

文章目录 3.SpringBoot整合xxl-job3.1定时任务服务配置3.1.1导入maven依赖3.1.2yml配置3.1.3XxlJobConfig配置类3.1.4定时任务类 3.2xxl-job配置3.2.1新增执行器3.2.2新增任务3.2.3执行任务3.2.4查看日志3.2.5查看任务后台日志 3.3小结 3.SpringBoot整合xxl-job 3.1定时任务服…

【Linux网络编程】4.TCP协议、select多路IO转换

目录 TCP协议 TCP通讯时序 三次握手 四次挥手 滑动窗口 测试代码1 测试结果 Address already in use解决方法 批量杀进程 测试代码2 测试结果 测试代码4 测试结果 TCP状态转换 主动发起连接请求端 主动关闭连接请求端 被动接收连接请求端 被动关闭连接请求端…

图片在线压缩,base64在线转换

图片在线压缩&#xff0c;超级好用 图片压缩 - 在线免费图片压缩软件-迅捷压缩在线迅捷免费在线图片压缩软件提供JPG压缩、PNG压缩、BMP压缩功能,为用户解决如何压缩图片的问题,实现一键压缩图片大小,是一款专业的高质量图片压缩工具.https://yasuo.xunjiepdf.com/img/ base64…

Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享

参考文档 useShareAppMessage 注意 使用时&#xff0c;必须为页面配置 enableShareAppMessage: true。&#xff08;修改配置文件后请重新编译项目&#xff09;当 onShareAppMessage 没有触发时&#xff0c;请在页面配置中设置 enableShareAppMessage: true只有定义了此事件处…

网闸与防火墙的区别

网闸与防火墙的区别 网闸与防火墙是两种不同的网络安全设备&#xff0c;它们的主要区别在于功能、部署位置、工作模式以及应用场景。12 功能差异&#xff1a;网闸主要用于流量控制、流量监视和攻击检测&#xff0c;而防火墙主要用于访问控制、网络地址转换和状态检测。网闸通常…

js自定义实现类似锚点(内容部分滚动)

场景&#xff1a; 效果图如上&#xff0c;类似锚点&#xff0c;但是屏幕不滚动。高度计算我不是很熟练。for循环写的比较麻烦。element plus 和Ant Design有类似组件效果。 html&#xff1a; <template><div><div style"height: 400px;" class&q…

【机器学习与实现】线性回归示例——波士顿房价分析

目录 一、创建Pandas对象并查看数据的基本情况二、使用皮尔逊相关系数分析特征之间的相关性三、可视化不同特征与因变量MEDV&#xff08;房价中值&#xff09;间的相关性四、划分训练集和测试集并进行回归分析 一、创建Pandas对象并查看数据的基本情况 boston.csv数据集下载&a…

C#(C Sharp)学习笔记_类【十五】

什么是类&#xff1f; 类&#xff08;Class&#xff09;是面向对象程序设计&#xff08;OOP&#xff0c;Object-Oriented Programming&#xff09;实现信息封装的基础。类是一种用户定义的引用数据类型&#xff0c;也称类类型。每个类包含数据说明和一组操作数据或传递消息的函…