opencv中的图片流保存
Posted 风翼科技
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv中的图片流保存相关的知识,希望对你有一定的参考价值。
做图片流处理的时候总是保存不对,
图片如下
用如下代码保存,其中Arr是byte数组
//IplImage *img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, Channels); //IplImage *img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3); //cvZero(img); //img->imageData =(char*) Arr; //img->imageDataOrigin= (char*)Arr; //cv::Mat mImg(img, 0);
这种效果
//Mat mImg(height, width, CV_8UC(Channels), (uchar*)Arr); //Mat mImg(height, width, CV_8UC(depth), (uchar*)Arr); //IplImage *img = &IplImage(mImg); imwrite(LPCSTR(csFile), mImg);
我需要冷静一下!!!!!!
研究了一下,改成如下
IplImage *img = cvCreateImageHeader(cvSize(width, height), IPL_DEPTH_8U, Channels); cvSetData(img, Arr, Channels*width); cv::Mat mImg(img, 0);
终于完美还原,问题来了,什么原因呢?
其实要想完美实现图片流解析,还是很简单的,主要,要找到对应的opencv的api
int getCvArr( byte* Arr, int size){ vector<char> vec; for (int i = 0; i < size; i++) { vec.push_back(*(Arr+i)); } Mat mImg = imdecode(Mat(vec), 1); }
其中的imdecode
CV_EXPORTS_W Mat imdecode( InputArray buf, int flags );
使用了Mat(vec)装换成InputArray类型
文件转化成为字节流
#include <fstream> ifstream infile; infile.open("D:/facesdktest/testproject/1_chenkun.jpg", ios::binary); if (!infile) { return; } infile.seekg(0, ios::end); unsigned long len = infile.tellg(); BYTE *buffer = new BYTE[len]; infile.seekg(0, ios::beg); infile.read((char*)buffer, len); //还有些检查流状态,上一次操作状态函数 infile.close();
其中buffer是字节流的指针,len是字节流的长度
Mat转数据流,便于网络传输二进制流
以上是关于opencv中的图片流保存的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV 和 python - 裁剪网络摄像头流并将其保存到文件
在 Python 多处理进程中运行较慢的 OpenCV 代码片段