我是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
答案 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);