将数据推回矩阵并使用 imshow 显示该矩阵
Posted
技术标签:
【中文标题】将数据推回矩阵并使用 imshow 显示该矩阵【英文标题】:Push back Data into Matrix and show that matrix using imshow 【发布时间】:2015-11-20 04:29:27 【问题描述】:我是 opencv 及其开发的新手。我想将无符号数据两个二维矩阵推回 Mat 类型对象。并使用 imshow(opencv 函数)显示 Mat 请找到我尝试过的以下代码片段。但我遇到了错误。任何帮助都会得到帮助。
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
【问题讨论】:
你遇到了什么错误? 可能不是问题,但 Mat finaldata(20, 10000, CV_8UC1) 表示 20 ROWS 和 10000 列 @Micka 我改变了它,但我仍然遇到同样的错误。有什么想法吗? 我自己还没用过mat.push_back,不过我会看看 据我所知,`mat.push_back 将向您的矩阵添加另一个 ROW。因此,您创建了一个 20x10000 矩阵并尝试添加另一个单个元素作为新行。这不起作用,因为您的行有 10000 列,而不仅仅是 1 列。 【参考方案1】:据我所知,`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);
【讨论】:
【参考方案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);
【讨论】:
这将以 40x10000 矩阵结束以上是关于将数据推回矩阵并使用 imshow 显示该矩阵的主要内容,如果未能解决你的问题,请参考以下文章