周总结之视频去重用到的一些c++知识点

来源:互联网 发布:电子琴入门软件 编辑:程序博客网 时间:2024/05/18 02:11

前言

对于这一周的视频去重工作总结,主要使用的环境为vs2015+opencv3.3+ffmpeg,将其中的一些关键细节点进行总结。
其中重点是在编写代码时所遇到的c++的一些基础点如:类型间的转换、建立hash哈希表、创建打开保存文件等操作。


c++知识点积累

1 . 将多个string字符串累加到一个向量中:
定义及实现如下:

vector<std::string> vecString;string rstVideo1;string rstVideo2;vecString.push_back(rstVideo1);vecString.push_back(rstVideo2);

2 . string与const char* 及char*类型转换:
参考这里;

(1) const char*转换为 string,直接赋值即可
const char* tmp = “ds”.
string s = tmp;
(2) string转换为const char*,利用c_str(),因为c_str()是string中的方法。
string s = “ds”;
const char*tmp = s.c_str();
(3) const char*转化为char*,利用如下:

const char* tmp = "ds";char* p = const_cast<char*>(tmp);

(4) char*转化为const char*,直接赋值即可。

     char* p = "ds".     const char* tmp = p;

(5)char*转化为string,直接赋值即可。

     char* p = "ds".     string str = p;

(6)string转化为char*,走两步,先是string->const char*,然后是const char*->char*

     string str = "ds";     char* p = const_cast<char*>(str.c_str()):

3 . 建立Hash表
从向量vecString1中依次读取其中的字符串,插入

#include <unordered_map>unordered_map<string,double> umap;unordered_map<string,double>::iterator it;//插入元素,建立hash表for(int m=0;m<vecString.size();++m){    string rstVideo_copy = vecString[m];    umap.insert(make_pair(rstVideo_copy,m));}//查找key是否存在hash表中it = umap.find(rstVideo_copy2);if(it == umap.end()){    cout << "find failed!" << endl;}//遍历hash表for(it == umap.begin();it != umap.end(); it++){    cout << it->first << " " <<it->second << endl;}

4 . 保存.yml文件:
将向量vecString写入到文件中对应的key : rstVideo下

FileStorage fs("VideoHah.yml",WRITE);fs << "rstVideo" << vecString;fs.release();

从文件中对应的key : rstVideo下读取向量vecString

FileStorage fs1("VideoHash.yml",READ);fs1["rstVideo"] >> vecString1;fs1.release();

判断文件是否打开成功

if(fs1.open("VideoHash.yml",READ)){    cout << "open successed" << endl;}

5 . 打开指定目录下的所有文件

string path1 = "trainVideo";string exten = "*";bool addPath = false;char file_root[255] = {0};Directory dir;//得到文件目录名字,判断下面有多少文件,遍历输出文件名vector<string> filenames =   dir.GetListFiles(path1,exten,addPath);for(int j=0;j<filenames.size();j++){    sprintf_s(file_root,"%s\\%s",path1,filenames[j].c_str());    cout << "file_root" << file_root << endl;}

6 . 判断文件目录是否存在,不存在则自动创建

// 循环创建img路径下的第j个文件夹char szFolder[255] = {0};sprintf_s(szFolder,"img\\%d\\",j);int n = SHCreateDirectoryEx(NULL,szFolder,NULL);

总结

后续仍在进行中,仍有很多知识点尚未记录其中,日后会继续添加,未完待续…..

原创粉丝点击