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转数据流,便于网络传输二进制流

 

转载于:https://www.cnblogs.com/baldermurphy/p/6771224.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值