opencv 保存读取16位深度的图像

1、项目中遇到需要保存16位深度的png图像,用来加速算法减少耗时并且数据从文本文档转换为png占用更小的flash,一举多得;
    IplImage *caimage = cvCreateImage(cvSize(w, h), IPL_DEPTH_16U, 3);       
    cv::Mat src= cvarrToMat(caimage);
    cv::Mat dst;
    src.convertTo(dst, CV_16UC3);
    std::vector<int> compression_params;
    compression_params.push_back(cv::IMWRITE_PNG_COMPRESSION);
    compression_params.push_back(0);
    compression_params.push_back(cv::IMWRITE_PNG_STRATEGY);
    compression_params.push_back(cv::IMWRITE_PNG_STRATEGY_DEFAULT);
    char name[128] = { 0 };
    string ss = "res";
    sprintf(name, "result_images\\%s.png", ss.c_str());
    imwrite(name, dst, compression_params);

2、涉及到IplImage与Mat的相互转换也一并在此记录一下
   a. Mat -->IplImage
      Mat mat_img=imread("samples.bmp");
      IplImage* ipl_img;
      ipl_img = &IplImage(mat_img);
   b. IplImage--->Mat
      IplImage* ipl_img = cvLoadImage("samples.bmp");;
      Mat mat_img;
      mat_img = Mat(ipl_img);//Mat(const IplImage* img, bool copyData=false);//opencv2.0
      //mat_img = cvarrToMat(ipl_img);//opencv3.0
3、快速get到Mat某个位置的像素值
     Mat src= imread("test.jpg");
     int x = src.cols-10;
     int y = src.rows-20;
     Mat p = mat.col(x).row(y);
     uchar* ptr = (uchar*) p.data;
     int B = ptr[0];
     int G = ptr[1];
     int R = ptr[2];
     cout<<"res:"<<B<<" "<<G<<" "<<R<<" "<<endl;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值