所以我是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一样。
答案 0 :(得分:0)
src.data - 给你(* uchar),但不给你(* raw_t_ubit16)。
(* uchar)8位。
(* raw_t_ubit16)16位。
((* 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();