CV::Mat数据拷贝 memcpy 踩坑

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

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

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

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

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

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

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

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 显示不一样。

Original: https://blog.csdn.net/long630576366/article/details/125484871
Author: maxruan
Title: CV::Mat数据拷贝 memcpy 踩坑

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/702894/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球