opencv从内存读取图片
来源:互联网 发布:windows可以不激活码 编辑:程序博客网 时间:2024/06/08 08:31
使用场景:
cv_2.4.1/ cpp/linux,我有一内存的文件内存快,是一图片。需要读取到Mat中。
原方案是io保存一次,然后执行imread。后面细想,这个方案要消耗两次IO,很浪费。能否绕过IO的瓶颈呢?
然后我去查CV的文档,有imdecode这样的接口
Reads an image from a buffer in memory.C++: Mat imdecode(InputArray buf, int flags)
满心欢喜,内存快转array,可以解码到Mat中。
#include <iterator>voidmemtoMat(){ std::ifstream file("./test.png"); std::vector<char> data; file >> std::noskipws; std::copy(std::istream_iterator<char>(file), std::istream_iterator<char>(), std::back_inserter(data)); Mat matrixJprg = imdecode(Mat(data), CV_LOAD_IMAGE_COLOR); imwrite("./result.jpg",matrixJprg);}
编译运行,ok。
然后测试性能。。
我把一个图片读取之后,转换10000次,并写出来。
$ time ./main
和我原方案相比,没有什么提升。很困惑,猜测imdecode是否也执行了保存流成文件的过程?Google上面瞅了一下。貌似是这个情况(没查阅源码验证)。想想,写这个接口的CV的成员真扯蛋。imread等接口肯定也需要将图片加载到内存的。为何写一个imdecode却这么投机。
Google了imread,其最终是调用fopen实现加载的。所以应该是可以跳过IO的步骤的。要修改增加CV的源码,不是很理想的办法。
参考blog.csdn.net/songzitea/article/details/11096287
0 0
- opencv从内存读取图片
- opencv 内存中读取一段jpg 图片
- 从内存读取图片信息,显示出来
- OpenCV读取的图片从BGR转换为RGB
- OpenCV读取内存数据
- opencv读取图片读取不成功
- opencv 图片ROI读取
- opencv 读取图片路径
- OpenCV:批量读取图片
- OpenCV读取图片
- opencv图片读取问题
- 【OpenCV】批量读取图片
- opencv读取图片失败
- opencv读取、显示图片
- OpenCV读取图片,从摄像头读入视频,从文件夹中读入视频
- OpenCv读取与解码内存中的图片及过程中的内存问题
- 从数据库读取图片
- 从数据库读取图片
- Netty的并发编程实践4:线程安全类的应用
- KindEditor使用手册
- 鼠标键盘xml动作文件的加载过程
- 【Eclipse】WEB 项目更改项目名
- 堆内存和栈内存
- opencv从内存读取图片
- MM模块在做GR的时候几个需要注意的地方
- echarts
- httpclient基本用法讲解
- 陈怡暖:金银再迎超级周!非农能否博得满堂彩?
- 正则表达式
- 插件GsonFormat快速实现JavaBean
- HDU5246 超级赛亚ACMer 贪心
- 将PDF文件转换成可编辑的word文档