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/
转载文章受原作者版权保护。转载请注明原作者出处!