当前位置:   article > 正文

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

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;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/888073
推荐阅读
相关标签
  

闽ICP备14008679号