CV::Mat数据拷贝 memcpy 踩坑

本文详细讲解了cv::Mat的初始化方式,特别关注连续性和不连续数据的区别。讨论了裁剪后Mat的不连续问题,提供了解决方案,包括使用clone()转换和数据memcpy。揭示了常见陷阱并给出正确操作实例。
摘要由CSDN通过智能技术生成
1、 cv:: mat 初始化

cv::Mat img1(h, w, CV_8UC3);
cv::Mat img1(h, w, CV_8UC3, data);

一般cv::mat 初始化后数据内存 data 段都是连续的, 可以用isContinuous()函数判断存储是否连续。

2、data段不连续情况

切记!切记!切记!不连续不能当一维数组处理

一般经过裁剪的Mat图像,都不再连续了,如
cv::Mat crop_img = src(rect);
crop_img 是不连续的Mat图像,如果想转为连续的,最简单的方法,就是将不连续的crop_img 重新clone()一份

cv::Mat clone_img = crop_img.clone();

不连续踩坑

(1)裁剪后数据赋值

cv::Mat crop_img = src(rect);
cv::Mat img_new1(h, w, CV_8UC3, crop_img.data);

会发现 img_new1 和 crop_img 显示不一样。

(1)数据内存 memcpy

cv::Mat crop_img = src(rect);
cv::Mat img_new1(h, w, CV_8UC3);
memcpy(img_new1.data, crop_img.data, sizeof(uchar) *w * 3 * h);

会发现 img_new1 和 crop_img 显示不一样。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值