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