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
相关推荐
西木莉3 分钟前
供应链动荡 + 经验流失,制造企业如何搭建反脆弱组织?
人工智能
核数聚4 分钟前
机器人开始补「触觉课」了
人工智能·机器人·核数聚
林墨聊AIGC11 分钟前
AI微短剧集数秘诀:有何讲究?
大数据·人工智能·ai作画·aigc·ai写作
RichardLau_Cx20 分钟前
PPT工具选型指南:WPS、PowerPoint、Canva 与 AI 办公助手(豆包_千问_WorkBuddy)到底怎么选?
人工智能·powerpoint·wps
2601_9654488720 分钟前
写新闻脚本太慢?AI按资讯源自动生成口播稿的完整流程
人工智能
深圳多奥智能一卡(码、脸)通系统22 分钟前
多模态:人脸AI、卡、密码、静脉智能梯控系统落地应用与场景实战
人工智能·门禁·梯控·门禁一卡通·人脸识别梯控·智能一卡通·人脸识别门禁
Tartly22 分钟前
搭载RTX Spark核心,华硕ProArt GR1X 个人AI智能体助手即将上线!
大数据·人工智能·spark
const_qiu24 分钟前
第四章 03:4.3 Tools —— 让 Agent 会用工具
java·人工智能
光电的一只菜鸡25 分钟前
高通中的深度学习模型部署概述
人工智能·深度学习
MIXrer31 分钟前
告别护具泥地与天气掣肘:超元力灰烬行动重构 VR 真人 CS 竞技体验
人工智能·vr·娱乐