使用cv :: Mat的矩阵乘法

时间:2012-10-29 22:57:26

标签: opencv

我之前曾问a question about matrix multiplication in OpenCV并设法找到正确的答案。但是,当我尝试这样做时,我得到了错误的结果:

#include <iostream>

#include <cmath>

#include "opencv2/core/core.hpp"

using namespace std;

int main() {

// Vars.
int a[4] = {3,2,1,4};
int b[4] = {2,5,6,1};

// Pointers
int *p1, *p2;
int res(5);

// Init.
p1 = &a[0];
p2 = &b[0];

for(int i=0;i<4;i++) {
    res += (*(p1+i) - 2)*(*(p2+i) - 3);
}
cout << res << endl; // This is fine!

unsigned int p[4] = {3,1,2,4};
cv::Mat testMat = cv::Mat(1,4,CV_8U,p);
cout << testMat << endl; // Shows [3, 0, 0, 0] !!!!!
cout << testMat.at<unsigned int>(0,3) << endl; // Displays 4


//cv::Mat resDot = testMat*(testMat.t());
cv::Mat testMatTransp(testMat.t());
cout << testMatTransp.at<unsigned int>(0,0) << endl; // Shows Jibrish 56928323
return(0);
}

除非我遗漏了某些内容,否则可能会正确打印出所有信息,对吧?我应该打电话给任何析构函数或任何东西?我认为它基于RAII,所以除非我使用“新的”初始化,否则我不需要调用析构函数。是对的吗?任何朝着正确方向的推动都会受到赞赏!

1 个答案:

答案 0 :(得分:3)

cv::Mat testMat = cv::Mat(1,4,CV_8U,p);

CV_8U表示8位无符号。如果将其更改为

cv::Mat testMat = cv::Mat(1,4,CV_32S,p);

它应该有用。或者,改变

unsigned int p[4] = {3,1,2,4};

unsigned char p[4] = {3,1,2,4};

也应该工作