opencv快速读写大量图片的方法
最近在项目中用到了图像字典,即需要一次性读入大量的图片数据作为参考(主要就是rgb三个维度的矩阵数据)。原本算法部分在matlab上做测试时,matlab的数据格式.mat支持大量数据的快速导入导出,但项目转移到opencv上时问题就出现了,opencv不能直接使用.mat文件。后来尝试了各种方法,包括.txt,还有opencv自带的.yml格式文件,速度都相当慢。.txt一般适合做配置文件,在数据量较小的时候可以使用,.yml则适合少量的图片存储。下面分别介绍大量图片的读写方法,参考的是这里。
opencv写入大量图片
#include <iostream>
#include <fstream>
#include <vector>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{ofstream outfile;outfile.open("data.bin", ios::binary);vector<String> files;string dir_path = "E:\\dict\\*.bmp"; //读取该目录下所有.bmp格式的文件glob(dir_path, files, true);for (int i = 0; i < files.size(); i++){Mat Iface = imread(files[i].c_str());for (int r = 0; r < Iface.rows; r++)outfile.write(reinterpret_cast<const char*>(Iface.ptr(r)), Iface.cols*Iface.elemSize());//cout << i << endl;}return 0;
}
运行完之后会生成一个data.bin文件,二进制格式的文件也不用担心像txt一样被编辑了。这里我测试了六七百张图片,一瞬间就完成了写入,我想一两千张图片的速度应该也不错。
opencv读取大量图片
#include <iostream>
#include <fstream>
#include <vector>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{int height = 200;int width = 200;int img_num = 700;//字典中图片的尺寸与图片总数量需提前知道ifstream infile;vector<Mat> dict;infile.open("data.bin", ios::binary);Mat img = Mat::zeros(height, width, CV_8UC3);for (int num = 0; num < img_num; num++){for (int r = num; r < num+img.rows; r++)infile.read(reinterpret_cast<char*>(img.ptr(r-num)), img.cols*img.elemSize());dict.push_back(img.clone());//注意这个clone很重要,否则vector的内容就都是一样了}return 0;
}
读取图片也是一瞬间就完成了,有一点不好就是需要提前知道字典里面图片的尺寸和图片的总数量。我想应该可以通过换行符或者终止符这些进行判断,不过我目前的项目要求没这么细,所以暂不深究,感兴趣的朋友可以试试看。
opencv快速读写大量图片的方法相关推荐
- C/C++快速读写磁盘数据的方法-块读取/异步/优化分析算法/内存文件映射的原理和使用
快速读写磁盘数据的方法: 1.块读取:一下子将数据读取到内存的(无论是文本还是二进制),而不是一行行的读取. 2.异步的IO,创建多线程,或者使用重叠IO,IO复用,异步的事件回调通知机制(可以用事件 ...
- 【蓝桥杯】Java组必备API类 --快速读写实现方法 及输入输出的巧妙处理
输入和输出 输入 Scanner s = new Scanner(System.in); //声明一个从控制台中读入数据的对象 int x = s.nextInt(); double x = s.ne ...
- Opencv快速入门(C++版),新手向
Opencv快速入门(C++版) 前言 1.图像的读取与显示 所使用的API接口: 代码演示: 2.图像色彩空间转换 所使用的API接口: 代码演示: 3.图像对象的创建与赋值 所使用的API接口: ...
- OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测
OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测 翻译自[OpenCV Fast Fourier Transform (FFT) for blur detection in images ...
- opencv快速入门人脸检测与人脸识别
让"它"认得你 --利用opencv快速入门人脸检测与人脸识别 opencv,顾名思义"开源,计算机视觉".OpenCV就是这样的一个特殊的框架,一群大牛然绕自 ...
- 一次代码重构之旅-快速读写xml文件工具类封装
为了满足系统的灵活性,有些功能经常需要用到配置文件,一般是xml格式的居多.如何能快速读写配置文件呢? 以前都是用dom4j提供的api来读写xml文件,用dom4j读写配置文件总感觉像是在结构化的处 ...
- opencv python3 找图片不同_如何使用OpenCV快速寻找定位图像差异
原标题:如何使用OpenCV快速寻找定位图像差异 如何使用结构相似性指数(SSIM)将两个图像与Python进行比较. 使用这种方法,我们能够轻松确定两个图像是否相同或由于轻微的图像处理,压缩伪像或有 ...
- mysql回滚用法_Mysql误操作后利用binlog2sql快速回滚的方法详解
前言 在日常工作或者学习中,操作数据库时候难免会因为"大意"而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2 ...
- yolt 卫星图像进行快速目标识别的新方法
"只需看两次"--对卫星图像进行快速目标识别的新方法 Bing 极市平台 今天 ↑ 点击蓝字关注极市平台 识别先机 创造未来 来源:论智 原文地址:arxiv.org/pdf/18 ...
最新文章
- java webpack web项目_官方出品,微信小程序和 Web 端同构解决方案——kbone
- python游戏脚本实例-使用Python写一个贪吃蛇游戏实例代码
- 20051008:看了AppleSeed,领悟到了一个道理:
- java中arges.length_java中的args.length
- Docker 三剑客
- 2013_nanjing_online
- 年轻人的第一篇V语言笔记
- [转载]基于TFS实践敏捷-工作项跟踪
- java----数据结构与算法----JavaAPI:java.util.Collection接口
- tp6 获取session_thinkphp6不能设置session以及模板无法获取session的坑附解决办法
- php choosewxpay fail,人人商城常见问题解决方案
- linux fedora14 u盘运行,通过U盘安装Fedora-14-i686-Live-Desktop
- urllib库(三)parse模块:quote()/quote_plus(),unquote()/unquote_plus(),quote_from_bytes()
- Autodesk Eagle入门之-线宽操作
- 关于sourcetree这是一个无效源路径的解决办法
- 海王夺回王位科学深意:杂种是怎么一步步主宰地球的
- 投资心理和关于延迟满足的三个实验
- mysql中if多重判断使用
- 2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest
- Kali开机后的初始化配置