元语境:
我目前正在开发一款利用opencv替代普通输入(键盘,鼠标等)的游戏.我通过DllImports在C++中使用Unity3D的C#脚本和opencv.我的目标是在我的游戏中创建一个来自opencv的图像.
代码上下文:
正如通常在OpenCV中所做的那样,我使用Mat来表示我的图像.这是我导出图像字节的方式:
cv::Mat _currentFrame;
...
extern "C" byte * EXPORT GetRawImage()
{
return _currentFrame.data;
}
Run Code Online (Sandbox Code Playgroud)
这就是我从C#导入的方式:
[DllImport ("ImageInputInterface")]
private static extern IntPtr GetRawImage ();
...
public static void GetRawImageBytes (ref byte[] result, int arrayLength) {
IntPtr a = GetRawImage ();
Marshal.Copy(a, result, 0, arrayLength);
FreeBuffer(a);
}
Run Code Online (Sandbox Code Playgroud)
从我理解OpenCV的方式来看,我希望在uchar指针中序列化时,以这种方式构造字节数组:
b1, g1, r1, b2, g2, r2, ...
Run Code Online (Sandbox Code Playgroud)
我正在使用以下方法将此BGR数组转换为RGB数组:
public static void BGR2RGB(ref byte[] buffer) {
byte swap;
for (int i = 0; i < buffer.Length; i = i + 3) { …Run Code Online (Sandbox Code Playgroud)