opencvc++图像导出到c#
Opencv c++ image export to c#
我试图写我自己的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;
DLL导入
[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返回时被销毁,因此您返回一个指向释放内存的指针。
你可以在GetJPEG中使用一个全局缓冲区,或者显式地传递一个缓冲区。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 如何使用opencvc++拍摄动态视频图像和深度图像
- 在opencvc++中设置彩色图像中的像素(i,j)为黑色
- opencvc++图像导出到c#
- 在opencvc++中设置图像区域为零的最佳方法
- 在opencvc++中打开图像
- 如何确定感兴趣的区域,然后使用opencvc++裁剪图像
- opencvc++在阈值图像中查找移动
- 使用OpenCvC++中的原始图像作为掩码,从图像中删除徽标
- 水下图像增强使用opencvc++