在尝试复制Bit16 Mat时,只有一半被实际复制



所以我是新的OpenCV,我想做的是复制一个bit16矩阵的元素。

src.create(h, w, CV_16UC(channels));
dst.create(hr, wr, CV_16UC(channels));
finalDst.create(h, w, CV_16UC(channels));
memcpy(src.data, data_in, w*h*sizeof(raw_t_ubit16));
for (i = 0; i < h; i++)
{
  for (j = 0; j < w; j++)
  {
    finalDst.data[j + i*w] = src.data[j + i*w];
  }
}
memcpy(data_out, finalDst.data, h*w*sizeof(raw_t_ubit16));

然而,这只复制了一半的图像,讽刺的是,如果我用2*h代替h,那么一切都会恢复正常。但事实并非如此,因为我将h定义为图像的高度就像w定义为宽度一样

src。数据-给你(*uchar),但不是(*raw_t_ubit16)。

(*uchar) 8 bit.

(*raw_t_ubit16) 16 bit.

((*uchar)data)[2] -将指向数组中的第3个字节(假设数组为uchar)。

((*raw_t_ubit16)data)[2] -将指向数组中的第5个字节(假设数组为raw_t_ubit16)。

这就是为什么你只复印了一半。

你可以写:

((raw_t_ubit16*)finalDst.data)[j + i*w] = ((raw_t_ubit16*)src.data)[j + i*w];

它应该工作,但最好使用Mat类的clone()方法:

m1=m2.clone();

相关内容

  • 没有找到相关文章

最新更新