我一直在努力想出我的代码出了什么问题。我试图对矩阵进行排序,然后复制排序矩阵的最后一行。我无法在调试器(vs2015 / vc ++)中查看内容,所以我需要将内容保存到磁盘,但我一直收到错误"没有给出元素名称"我怀疑是排序矩阵的最后一行的错误复制操作的结果。
cv::Mat sortedIndices;
cv::sortIdx(Matrix, sortedIndices, CV_SORT_EVERY_COLUMN + CV_SORT_ASCENDING);
cv::sort(Matrix, Matrix, CV_SORT_EVERY_COLUMN + CV_SORT_ASCENDING);
auto cols = Matrix.size().width-1;
auto maximums = Mat::zeros(1,cols+1,Matrix.type());
Mat onlyRow = maximums.row(0);
Matrix.row(Matrix.size().height - 1).copyTo(onlyRow);
cv::FileStorage file("G:/3.txt", cv::FileStorage::WRITE);
file << maximums;
答案 0 :(得分:1)
sort
对矩阵进行排序,之前不需要sortIdx
。FileStorage
保存内容时,您应指定名称。以下示例应澄清:
#include <opencv2\opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;
int main()
{
RNG rng(1234);
// Create a small random matrix
Mat1b mat(3,5);
randu(mat, Scalar(0), Scalar(255));
// Sort the columns in ascending order
cv::sort(mat, mat, SORT_EVERY_COLUMN + SORT_ASCENDING);
// Just creating the header to last row
// No actual data copy
Mat1b lastCol(mat, Range(mat.rows - 1, mat.rows), Range::all());
{
// Write last row to file
FileStorage fout("test.yml", FileStorage::WRITE);
fout << "some_name" << lastCol;
}
Mat1b lastCol2;
{
// Read last row from file
FileStorage fin("test.yml", FileStorage::READ);
fin["some_name"] >> lastCol2;
}
// lastCol and lastCol2 contain the same values now.
return 0;
}
由于您提到需要转储数据以进行调试,请参阅this问题。 简而言之,您会发现Image Watch Visual Studio扩展非常有用。