Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
opencv中的矩阵乘法错误?_Opencv - Fatal编程技术网

opencv中的矩阵乘法错误?

opencv中的矩阵乘法错误?,opencv,Opencv,我知道在opencv中有3种方法可以乘法矩阵,一种是: cvGEMM(M1, M1T, 1, NULL, 0, Mult, 0); 另一个: cvMulTransposed(M1, Mult, 0); 第三: cvMul(M1, M1T, Mult); 我基本上是把一个矩阵乘以它的转置。乘法后,矩阵应该是对称的。。但是上面的每一种方法都给了我一个不对称的、完全错误的输出。。以下是原始(M1)矩阵: 但将其乘以其转置得到: rows: 5 cols: 5 dt: f dat

我知道在opencv中有3种方法可以乘法矩阵,一种是:

cvGEMM(M1, M1T, 1, NULL, 0, Mult, 0);
另一个:

cvMulTransposed(M1, Mult, 0);
第三:

cvMul(M1, M1T, Mult);
我基本上是把一个矩阵乘以它的转置。乘法后,矩阵应该是对称的。。但是上面的每一种方法都给了我一个不对称的、完全错误的输出。。以下是原始(M1)矩阵:

但将其乘以其转置得到:

rows: 5
   cols: 5
   dt: f
   data: [ 927321., 1014163., 923303., 923303., 947641., 1014163.,
       1260101., 1062130., 1062130., 1102823., 923303., 1062130.,
       1004488., 1004488., 990651., 923303., 1062130., 1004488.,
       1004488., 990651., 947641., 1102823., 990651., 990651., 1116004. ]
这些值是不对称的,我也不明白它们是怎么变得这么大的


cvMultransposed和cvGEMM给出的结果与上面复制的结果相同。。cvMul给出一些运行时错误并返回垃圾值。有什么建议吗?

我无法解释对称性的缺失,但数字的大小正是我所期望的。当你将矩阵相乘时,你会从第一行得到内积,从第二行得到一列。因为行是50个元素,元素在50-200范围内,所以对于输出矩阵中的一个元素,大约是50*100*100=500000。

我无法解释对称性的缺乏,但数字的大小是我所期望的。当你将矩阵相乘时,你会从第一行得到内积,从第二行得到一列。因为您的行是50个元素,并且元素在50-200范围内,所以对于输出矩阵中的一个元素,大约是50*100*100=500000。

除了预期的大输出值(Japreis已经告诉过您),您得到的矩阵是对称的

我将其对齐以提高可读性:

reshape(a,5,5)

ans =

      927321     1014163      923303      923303      947641
     1014163     1260101     1062130     1062130     1102823
      923303     1062130     1004488     1004488      990651
      923303     1062130     1004488     1004488      990651
      947641     1102823      990651      990651     1116004

所以,这里没有错,如果你去问为什么X会在将来出现,你应该仔细检查X确实是这样的…

除了预期的大输出值(Japreis已经告诉过你),你得到的矩阵是对称的

我将其对齐以提高可读性:

reshape(a,5,5)

ans =

      927321     1014163      923303      923303      947641
     1014163     1260101     1062130     1062130     1102823
      923303     1062130     1004488     1004488      990651
      923303     1062130     1004488     1004488      990651
      947641     1102823      990651      990651     1116004

所以,这里没有错,如果你去问为什么X会在将来出现,你应该仔细检查X是否确实是这样…

大多数时候,我发现一个“错误”的结果,这是因为我不理解API或者正确的答案是什么样子的。公开可用的软件中出现错误的可能性较小。一个庞大的用户群几乎可以保证,在我发现并修复该漏洞之前,会有其他人发现该漏洞。我几乎可以肯定,问题在于你、你的理解和你的代码。我不是说这是一个bug,我肯定这是我的错误,但我整天都在努力,无法修复它,这就是我在这里寻求帮助和建议的原因。@Faraz Khan:您应该发布一些生成这种意外行为的代码,以便我们能够理解原因。大多数情况下,我发现“错误”的结果,是因为我不理解API或正确的答案。公开可用的软件中出现错误的可能性较小。一个庞大的用户群几乎可以保证,在我发现并修复该漏洞之前,会有其他人发现该漏洞。我几乎可以肯定,问题在于你、你的理解和你的代码。我不是说这是一个bug,我肯定这是我的错误,但我整天都在努力,无法修复它,这就是我在这里寻求帮助和建议的原因。@Faraz Khan:您应该发布一些生成这种意外行为的代码,以便我们能够理解原因。很有趣。。谢谢你指出这一点。。我试着用另一种方式重新安排。。谢谢你指出这一点。。我试着换一种方式重新安排谢谢你指出这一点。。我想我看错问题了。。我正在对这些值进行标准化处理。。也许这能解决我的问题。另外,你能告诉我你是如何与黑客帝国结盟的吗?我认为重塑只能在以下格式下工作:
cvrestrape(mat和row_标题,0,1)。。你们在编译器中显示了矩阵吗?我认为只有当我们想查看矩阵的内容时,才可以使用cvSave。在matlab(而不是opencv)中,重塑纯粹是为了显示,因为我是以单行形式输入数字的。我只是把你的矩阵输出(你的第二行)对齐了。非常感谢你指出这一点。。我想我看错问题了。。我正在对这些值进行标准化处理。。也许这能解决我的问题。另外,你能告诉我你是如何与黑客帝国结盟的吗?我认为重塑只能在以下格式下工作:
cvrestrape(mat和row_标题,0,1)。。你们在编译器中显示了矩阵吗?我认为只有当我们想查看矩阵的内容时,才可以使用cvSave。在matlab(而不是opencv)中,重塑纯粹是为了显示,因为我是以单行形式输入数字的。我只是把你的矩阵输出(你的第二行)对齐了。