gpt4 book ai didi

c++ - Opencv C++ 图像导出到 C#

转载 作者:太空狗 更新时间:2023-10-29 21:42:46 24 4
gpt4 key购买 nike

我正在尝试编写我自己的 C++ 插件以在 Unity3d 中使用它。完成帧处理后,我想将它导出到 Unity 并分配给 Texture2d,但我得到了一个红色问号纹理,传递给 c# 的数据看起来像:“�������������� �"

C++ DLL 代码:

extern "C" int EXPORT_API GetJpeg(unsigned char* *data, int* size)

cv::Mat myMat(frame);

std::vector<int> p;
p.push_back(CV_IMWRITE_JPEG_QUALITY);
p.push_back(10);
std::vector<unsigned char> buf;

cv::imencode(".jpg", myMat, buf, p);

*data = &buf.front();
*size = buf.size();

p.clear();
myMat.release();

if (buf.size() > 0)
{
return 1;
}

return 0;

动态链接库导入

[DllImport("OpenCVPlugin")]
static extern int GetJpeg(out IntPtr data, out int size);

更新函数

if(capture < 1)
{
capture = StartCapture(camIndx);
camIndx++;
}

process = ProcessFrame();

int hr = 0;
IntPtr frameData = IntPtr.Zero;
int gSize = 0;

hr = GetJpeg(out frameData, out gSize);
byte[] arr = new byte[gSize];

if(arr != null && gSize > 0)
{
Marshal.Copy(frameData, arr, 0, gSize);

tex = new Texture2D(400,400);
tex.LoadImage(arr);

DisplayPlane.renderer.material.mainTexture = tex;
}

我做错了什么?请帮忙。

最佳答案

出错的一件事是,当 GetJPEG 返回时,GetJPEG 中的“buf”被销毁,因此您返回的是指向已释放内存的指针。

您可以在 GetJPEG 中使用全局缓冲区,或显式传入缓冲区。

关于c++ - Opencv C++ 图像导出到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24996186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com