【C++】Mat型数据写入txt文件并可用标签进行搜索读出

实习交给我的一个任务,在txt中存入Mat型数据,并且每个数据都有标签,可以一直写入,如果标签重复就不用写入了。然后可以根据标签找到对应的Mat型数据。

根据要求写了两个函数,分别为:

int WriteData(string fileName, string dataName, std::vector<cv::Mat> data);
int LoadData(string fileName, string label, cv::Mat& matData);

起初以为是检查Mat型数据是否重复,写了这个函数,大家有需要可以用,这里我没有用到。

int matIsEqual(const cv::Mat mat1, const cv::Mat mat2,int &ff) 
{
    ff = 0;

    if (mat1.empty() && mat2.empty()) return true;
    if (mat1.cols != mat2.cols || mat1.rows != mat2.rows || mat1.dims != mat2.dims ||mat1.channels() != mat2.channels()) ff = 0;
    if (mat1.size() != mat2.size() || mat1.channels() != mat2.channels() || mat1.type() != mat2.type()) ff = 0;

    int nrOfElements1 = mat1.total()*mat1.elemSize();
    if (nrOfElements1 != mat2.total()*mat2.elemSize()) ff = 0;
    if(memcmp(mat1.data, mat2.data, nrOfElements1) == 0) ff =1;
    return false;
}

作为小白,代码有很多不规范的地方,欢迎批评指正

另外有一个疑问?根据标签查找Mat数据实现的过程,也就是LoadData函数有些繁琐,先将txt存入string型vector,找到标签,将下面位置的数据存入另一个int型vector,并转化成Mat型,这时候矩阵是N行1列,再进行reshape,得到想要的结果。

这样Mat型的数据只能是固定行列的,如何改进这一问题呢?

希望可以得到大神的指导。

下面直接上任务的完整代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值