失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C++读入txt 写入txt 循环读入txt 循环写入txt

C++读入txt 写入txt 循环读入txt 循环写入txt

时间:2018-12-31 00:28:21

相关推荐

C++读入txt 写入txt 循环读入txt 循环写入txt

目录

1普通读写

2循环读写(存在小瑕疵)

3.循环读写(解决小瑕疵)

1普通读写

#include<iostream>#include<fstream>#include<string>using namespace std;void writeTXT(string name, string content, bool cover);//如果没有就创建void readTxtShow(string name);int main() {//创建以及writeTXTwriteTXT("label.txt", "hello world!", false);//true为覆盖,false为接着写//read入TXT并显示readTxtShow("label.txt");}void writeTXT(string name, string content ,bool cover) {ofstream write(name, cover ? ios::trunc : ios::app);if (write.is_open()){write << content << endl;write.close();}}void readTxtShow(string name) {fstream file;file.open(name);while (!file.eof()){string s1;file >> s1;cout << s1 << endl;}file.close();}

2循环读写(存在小瑕疵,如果list带有label就不行)

#include <iostream>#include <fstream>#include <string>#include <opencv2/opencv.hpp>#include <time.h>#include <ctime>#include <sys/time.h>using namespace std;void write_txt(string name, string content ,bool cover) {ofstream write(name, cover ? ios::trunc : ios::app);if (write.is_open()){write << content << endl;write.close();}}void readShow_txt(string name) {fstream file;file.open(name);while (!file.eof()){string s1;file >> s1;cout << s1 << endl;}file.close();}long tickCount(){static struct timeval tv;gettimeofday(&tv,NULL);return tv.tv_sec * 1000 + tv.tv_usec / 1000;}int file2list(const char *imageLists, std::vector<std::string> &lists){lists.clear();std::ifstream file;file.open(imageLists);char str[200];int num=0;// 存在问题,这里多读入了一行,所以下面的代码才使用的是 images.size()-1while(!file.eof()){memset(str,0,200);file.getline(str,200);lists.push_back(std::string(str));//std::cout<<"111111 "<<std::string(str)<<std::endl;num++;}return num;}int main() {std::string imgs = "./JPEGImages/";std::string save = "./save/";std::string txtSave = "./txtResults/";const char *imagesList = "./list.txt";std::vector<std::string> images;file2list(imagesList, images);std::string txtsLine1;std::string txtsLine2;for(int i=0;i<images.size()-1;i++){cv::Mat img = cv::imread(imgs+images[i]+".jpg");if(img.cols == 0)continue;long s = tickCount();//目标检测std::cout<<"detect time "<<(tickCount()-s)<<std::endl;write_txt(txtSave+images[i]+".txt",txtsLine2,true);cv::imwrite(save+images[i]+".jpg", img);}//创建以及writeTXTwrite_txt("label.txt", "hello world!", false);//true为覆盖,false为接着写//read入TXT并显示readShow_txt("label.txt");}

3.循环读写(解决小瑕疵,list带有label)

#include <iostream>#include <fstream>#include <string>#include <opencv2/opencv.hpp>#include <time.h>#include <ctime>#include <sys/time.h>using namespace std;void write_txt(string name, string content ,bool cover) {ofstream write(name, cover ? ios::trunc : ios::app);if (write.is_open()){write << content << endl;write.close();}}void readShow_txt(string name) {fstream file;file.open(name);while (!file.eof()){string s1;file >> s1;cout << s1 << endl;}file.close();}long tickCount(){static struct timeval tv;gettimeofday(&tv,NULL);return tv.tv_sec * 1000 + tv.tv_usec / 1000;}#define EQUALITY_SIGN " "///ke7in1314/article/details/28429283///franket268/article/details/12094093//多读一次的解决方法int file2list(const char *imageLists, std::vector<std::string> &lists, std::vector<std::string> &fileLabels){lists.clear();std::ifstream file;file.open(imageLists);char str[200];string filestr;int num=0;std::string tmp;while(!file.eof()){memset(str,0,200);file.getline(str,200);if(file.fail())break;filestr = str;std::string::size_type pos=filestr.find(EQUALITY_SIGN);std::string firstStr = filestr.substr(0,pos);std::string laterStr = filestr.substr(pos + strlen(EQUALITY_SIGN));lists.push_back(firstStr);fileLabels.push_back(laterStr);//std::cout<<firstStr<<" 111111 "<<laterStr<<std::endl;num++;}return num;}int main() {std::string imgs = "./JPEGImages/";std::string save = "./save/";std::string txtSave = "./txtResults/";const char *imagesList = "./list.txt";std::vector<std::string> images;std::vector<std::string> fileLabels;//file2list(imagesList, images);file2list(imagesList, images, fileLabels);std::string txtsLine1;std::string txtsLine2;// 这里不仅可以读入label 也可以不用-1for(int i=0;i<images.size();i++){cv::Mat img = cv::imread(imgs+images[i]+".jpg");if(img.cols == 0)continue;long s = tickCount();//目标检测std::cout<<"detect time "<<(tickCount()-s)<<std::endl;write_txt(txtSave+images[i]+".txt",txtsLine2,true);cv::imwrite(save+images[i]+".jpg", img);}//创建以及writeTXTwrite_txt("label.txt", "hello world!", false);//true为覆盖,false为接着写//read入TXT并显示readShow_txt("label.txt");}

读入label,该label有多标签(4个)

#include <iostream>#include <opencv2/opencv.hpp>#include <fstream>#include "ocr_api.hpp"#include <ctime>#include <sys/time.h>using namespace cv;using namespace std;#define EQUALITY_SIGN " "int file2list(const char *imageLists, std::vector<std::string> &lists, std::vector< std::vector<std::string> > &fileLabels){lists.clear();std::ifstream file;file.open(imageLists);char str[200];string filestr;int num=0;std::string tmp;while(!file.eof()){memset(str,0,200);file.getline(str,200);if(file.fail())break;filestr = str;std::string::size_type pos=filestr.find(EQUALITY_SIGN);std::string firstStr = filestr.substr(0,pos);std::string laterStr = filestr.substr(pos + strlen(EQUALITY_SIGN));std::string::size_type label1 = laterStr.find(EQUALITY_SIGN);std::string firstStr1 = laterStr.substr(0,label1);std::string laterStr1 = laterStr.substr(label1 + strlen(EQUALITY_SIGN));std::string::size_type label2 = laterStr1.find(EQUALITY_SIGN);std::string firstStr2 = laterStr1.substr(0,label2);std::string laterStr2 = laterStr1.substr(label2 + strlen(EQUALITY_SIGN));std::string::size_type label3 = laterStr2.find(EQUALITY_SIGN);std::string firstStr3 = laterStr2.substr(0,label3);std::string laterStr3 = laterStr2.substr(label3 + strlen(EQUALITY_SIGN));std::vector<std::string> temp;lists.push_back(firstStr);temp.push_back(firstStr1);temp.push_back(firstStr2);temp.push_back(firstStr3);temp.push_back(laterStr3);fileLabels.push_back(temp);//std::cout<<firstStr<<" 111111 "<<laterStr<<std::endl;num++;}return num;}long tickCount(){static struct timeval tv;gettimeofday(&tv,NULL);return tv.tv_sec * 1000 + tv.tv_usec / 1000;}//resnet50分类-int main(int argc, char **argv){const string &modelDir = "./model";const string &roots="./data/";const char *imagesList = "all.txt";std::vector<std::string> images;std::vector< std::vector<std::string> > fileLabels;//std::vector<std::string> fileLabels;file2list(imagesList, images, fileLabels);Ocr_api *OCR = Ocr_api::instance(modelDir, Ocr_api::GPU, 0);float count1 = 0;float count2 = 0;float count3 = 0;float count4 = 0;for(int i=0;i<images.size();i++){cv::Mat img = cv::imread(roots+images[i]);if(img.cols == 0)continue;vector<int> chars;long start = tickCount();OCR->ocr_recongnize(img, chars);long end = tickCount() - start;std::cout<< "use time : " << end << " ms" <<std::endl;std::vector<std::string> label = fileLabels[i];int value1 = std::stoi(label[0]);int value2 = std::stoi(label[1]);int value3 = std::stoi(label[2]);int value4 = std::stoi(label[3]);if(chars[0]==value1){count1 += 1;}if(chars[1]==value2){count2 += 1;}if(chars[2]==value3){count3 += 1;}if(chars[3]==value4){count4 += 1;}}std::cout<<"正确率"<<count1<<"/"<<images.size()<<"="<<float(count1/images.size())<<std::endl;std::cout<<"正确率"<<count2<<"/"<<images.size()<<"="<<float(count2/images.size())<<std::endl;std::cout<<"正确率"<<count3<<"/"<<images.size()<<"="<<float(count3/images.size())<<std::endl;std::cout<<"正确率"<<count4<<"/"<<images.size()<<"="<<float(count4/images.size())<<std::endl;Ocr_api::uninstance(OCR);//释放}

如果觉得《C++读入txt 写入txt 循环读入txt 循环写入txt》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。