如何将Mat数据(OpenCV,图像数据格式)转换为unity3d texutre

时间:2015-12-08 07:24:39

标签: c++ opencv unity3d textures mat

我知道Mat数据将每个像素数据(列中的RGB数据)保存为unsigned char。 unity3d中的纹理数据是byte []。我尝试做以下事情,但结果不对,从hwind中显示的相机拍摄的图像不正确。

Mat src_frame;//this is every frame that captured from the current camera
D3DLOCKED_RECT d3d_rect;
byte *pSrc = src_frame.data;
byte *pDest = (byte *)d3d_rect.pBits;

int stride = d3d_rect.Pitch;
int pixel_w_size = src_frame.cols;
for (unsigned long i = 0; i < src_frame.rows; i++){
    memcpy(pDest, pSrc, pixel_w_size);
    pDest += stride;
    pSrc += pixel_w_size;
}

只有灰色图像显示,我不知道为什么会发生这种情况。 Mat数据序列是否与纹理数据不同?他们的数据都包含RGB信息。

1 个答案:

答案 0 :(得分:0)

pixel_w_size应该src_frame.cols乘以每个像素的字节数(RGB情况下为3),甚至更好地使用elemSize()

所以使用:

int pixel_w_size = src_frame.cols * src_frame.elemSize();