gpt4 book ai didi

c++ - 复制排序矩阵的一行并保存到文件 - opencv3

转载 作者:行者123 更新时间:2023-11-28 06:07:08 24 4
gpt4 key购买 nike

我一直在竭尽全力找出我的代码有什么问题。我正在尝试对矩阵进行排序,然后复制排序矩阵的最后一行。我无法在调试器 (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;

我希望这很简单! enter image description here

最佳答案

  • 您可以直接调用sort对矩阵进行排序,之前不需要sortIdx
  • 您可以使用 Range 方便地获取子矩阵(例如单行) .
  • 在使用 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 扩展非常有用。

关于c++ - 复制排序矩阵的一行并保存到文件 - opencv3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32175146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com