将数据推回矩阵并使用imshow

时间:2015-11-20 04:29:28

标签: c++ opencv matrix

我是opencv及其开发人员的新手。我想将无符号数据两个二维矩阵推回到Mat类型对象中。并显示Mat使用imshow(opencv函数)请找到我试过的下面的代码snippit。但我收到了错误。任何帮助都适用。

Mat finaldata(20, 10000, CV_8UC1);
unsigned char test[20][10000]={"0"};// test having values i checked it.

    for (int coloumns=0 ;coloumns <20;coloumns++)
        {
            for (int row=0 ;row <10000;row++)
            {
                finaldata.push_back(test[coloumns][row]);
            }

        }

        imshow("window ", finaldata);
        waitKey(0);

错误

OpenCV Error: Assertion failed (DataType<_Tp>::type == type() && cols == 1) in push_back, file /usr/local/include/opencv2/core/mat.hpp, line 690
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /usr/local/include/opencv2/core/mat.hpp:690: error: (-215) DataType<_Tp>::type == type() && cols == 1 in function push_back

Program ended with exit code: 9

2 个答案:

答案 0 :(得分:2)

我不确定您是否可以使用push_back函数添加简单数组。我更愿意使用以下方式:

cv::Mat finaldata(20, 10000, CV_8UC1);
cv::Mat zero = cv::Mat::zeros(1, 10000, CV_8UC1);

for (int coloumns = 0; coloumns <20; coloumns++)
{
    finaldata.push_back(zero);
}

cv::imshow("window ", finaldata);
cv::waitKey(0);

答案 1 :(得分:2)

据我所知,`mat.push_back将为你的矩阵增加另一个ROW。因此,您创建一个10000x20矩阵,并尝试将另一个元素添加为新行。这不起作用,因为您的行有20列而不只是1列。

所以这会奏效:

cv::Mat finaldata(0, 0, CV_8UC1);
unsigned char test[20][10000]={"0"};// test having values i checked it.
for (int coloumns=0 ;coloumns <20;coloumns++)
    {
        for (int row=0 ;row <10000;row++)
        {
           finaldata.push_back(test[coloumns][row]);
        }

    }

但在这里你最终得到一个200000x1的矩阵。您可以使用cv::reshape或类似名称:

finaldata = finaldata.reshape(1,10000); // if 10000 should be the number of rows.

然而,您可以直接使用您的数据而无需任何复制(使用指向数据的指针):

unsigned char test[20][10000]={"0"};// test having values i checked it.
cv::Mat finaldata(10000, 20, CV_8UC1, &test);