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

How to convert Mat data(OpenCV, data format for image) into unity3d texutre

本文关键字:数据格式 转换 texutre unity3d 图像 Mat 数据 OpenCV      更新时间:2023-10-16

我知道Mat数据将每个像素数据(列中的RGB数据)保存为无符号字符。而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信息。

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

所以使用:

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