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

测试代码C++

cpp 复制代码
#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 1
	auto 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);


#endif

	t0 = 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";


}
  • 输出:
bash 复制代码
直接赋值耗时:0.00 ms
图像clone耗时:0.76 ms
memcpy耗时:0.51 ms
  • 若把图像大小设为3000,则 差距就很明显了
cpp 复制代码
int wh = 3000;
cv::Mat A = cv::Mat(wh, wh, CV_8UC1, cv::Scalar::all(128));
  • 结果如下:
bash 复制代码
直接赋值耗时:0.00 ms
图像clone耗时:4.84 ms
memcpy耗时:2.53 ms
相关推荐
~~李木子~~1 天前
中文垃圾短信分类实验报告
人工智能·分类·数据挖掘
王林(瑞昱Realtek,龙迅)1 天前
视频拼接,分割,矩阵技术方案介绍
图像处理·嵌入式硬件·显示器·8k显示·画面拼接
TsingtaoAI1 天前
企业实训|自动驾驶中的图像处理与感知技术——某央企汽车集团
图像处理·人工智能·自动驾驶·集成学习
王哈哈^_^1 天前
YOLO11实例分割训练任务——从构建数据集到训练的完整教程
人工智能·深度学习·算法·yolo·目标检测·机器学习·计算机视觉
檐下翻书1731 天前
从入门到精通:流程图制作学习路径规划
论文阅读·人工智能·学习·算法·流程图·论文笔记
SalvoGao1 天前
Python学习 | 怎么理解epoch?
数据结构·人工智能·python·深度学习·学习
搬砖者(视觉算法工程师)1 天前
自动驾驶汽车技术的工程原理与应用
人工智能·计算机视觉·自动驾驶
CV实验室1 天前
2025 | 哈工大&鹏城实验室等提出 Cascade HQP-DETR:仅用合成数据实现SOTA目标检测,突破虚实鸿沟!
人工智能·目标检测·计算机视觉·哈工大
aitoolhub1 天前
培训ppt高效制作:稿定设计 + Prompt 工程 30 分钟出图指南
人工智能·prompt·aigc
oranglay1 天前
提示词(Prompt Engineering)核心思维
人工智能·prompt