openCV vs matlab矩阵连接

时间:2015-09-22 21:47:13

标签: c++ matlab opencv image-processing matrix

这是我尝试在openCV 2.4.11中重现的matlab代码

A = [1 1; 1 1]; 
B = [2 2; 2 2];
C = [3 3; 3 3];
D = cat(3, A, B,C)
D= imresize(D, [100 50], 'nearest');

这是我到目前为止所尝试的。但据我所知,这不是相同的3D矩阵,openCV只是将矩阵附加到另一个矩阵上。

cv::Mat a(2,2,CV_64F);
cv::Mat b(2,2,CV_64F);
cv::Mat c(2,2,CV_64F);
for (int i = 0; i < 4; i++)
{
    a.at<double>(i) = 1;
    b.at<double>(i) = 2;
    c.at<double>(i) = 3;
}

cv::Mat d;
std::vector<cv::Mat>tempVec;
tempVec.push_back(a);
tempVec.push_back(b);
tempVec.push_back(c);

cv::hconcat(tempVec,d);

我也试过了

cv::Mat d = cv::Mat::zeros(2,2,CV_64FC3);
for (int w = 0; w < 2; w++)
{
    for (int h = 0; h < 2; h++)
    {
        d.at<cv::Vec3d>(w,h)[0] = a.at<double>(w,h);
        d.at<cv::Vec3d>(w,h)[1] = b.at<double>(w,h);
        d.at<cv::Vec3d>(w,h)[2] = c.at<double>(w,h);
    }
}    
你可以帮忙吗?请看我需要在下一行matlab中使用imresize,所以解决方案应该是cv :: Mat

将cv :: Mat与cv :: Vec3f做诀窍?或者有更好的方法将3个矩阵连成3D矩阵吗?

更新: 我将cv::hconcat(tempVec,d);更改为cv::merge(tempVec, d);

并将此打印件添加到文件

ofstream myfile;
myfile.open("C:\\Users\\gdarmon\\Desktop\\OpenCV_TNR.txt");
myfile << d;
myfile.close();

这是我的输出

[1, 2, 3, 1, 2, 3;
  1, 2, 3, 1, 2, 3]

1 个答案:

答案 0 :(得分:1)

你非常接近。我会用cv::merge。实际上,它的目的是将单通道矩阵(2D)合并为一个多通道矩阵(3D)。

因此,请尝试:

,而不是cv::hconcat
cv::merge(tempVec, d);