Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CV的问题:C++中的矩形_C#_C++_Opencv - Fatal编程技术网

C# CV的问题:C++中的矩形

C# CV的问题:C++中的矩形,c#,c++,opencv,C#,C++,Opencv,在cv::mat中绘制矩形时出现问题。我正在Unity和C++之间进行通信,以生成一个Android应用程序 我使用unity的webcamtexture摄像头,并使用PInvoke方法将的信息发送到C++中。在C++代码中,我想画一个矩形,但是我在图像中看到了不止一个,我真的不明白为什么。我希望你能帮助我,我附加了C++和C代码。 C 为了完整起见,我将发布答案 问题就在眼前 dst = Mat(tamWid,tamHeid,CV_8UC3, arr); 将行和列作为前两个参数,在您的示

在cv::mat中绘制矩形时出现问题。我正在Unity和C++之间进行通信,以生成一个Android应用程序

我使用unity的webcamtexture摄像头,并使用PInvoke方法将的信息发送到C++中。在C++代码中,我想画一个矩形,但是我在图像中看到了不止一个,我真的不明白为什么。我希望你能帮助我,我附加了C++和C代码。

C


为了完整起见,我将发布答案

问题就在眼前

dst = Mat(tamWid,tamHeid,CV_8UC3, arr); 
将行和列作为前两个参数,在您的示例中是列和行

因此,它应该是:

dst = Mat(tamHeid,tamWid,CV_8UC3, arr);
其他考虑 正如我在评论中所说的,您应该知道某些可能的错误源,因为OpenCV和Unity中的约定并不相同。其中之一是二维坐标系的原点。在OpenCV中,是在左上角和Unity中,或者至少使用GetPixels32函数是在图像的左下角


另一个可能的问题是颜色空间。OpenCV在加载、保存和其他函数时需要BGR图像,而在其他框架中则使用32位的RGB或RGBA

我不能肯定地说,但我的猜测是,您已经用行移动了列,也就是说OpenCV以列方式存储图像数据,而Unity OpenGL以行方式或其他方式存储图像数据。你能调试这个C++代码并用IMAGE手表插件检查矩阵吗?或者简单地用cv::imwrite保存dst。此外,您应该首先复制dst,然后在其上绘制。至于现在,你改变了原始图像并复制了它,所以两者都是矩形的。对不起,我不知道你在告诉我什么。我在上一个函数中传递了图像大小的信息,它的分辨率为640x480。我不太明白你想用edge说什么,更不用说你如何解决它了。关于调试,我不能使用,因为我在unity中使用共享库来创建Android应用程序。@R2RT opencv是row MARY。问题是dst=MattamWid,tamHeid,CV_8UC3,arr;它是构造函数中的行、列,因此它应该是dst=MattamHeid、tamWid、CV_8UC3、arr;然后,您还必须检查数据是按列还是按行,如果是按列,则需要保持与以前一样,并转置mat@api55是的,我认为你是对的。你应该回答这个问题。乌尔科,尝试与马塔姆海德,塔姆威德,CV_8UC3,arr;它的工作原理,感谢你每一个身体解决方案:MattamHeid,tamWid,CV_8UC3,arr;
dst = Mat(tamWid,tamHeid,CV_8UC3, arr); 
dst = Mat(tamHeid,tamWid,CV_8UC3, arr);