您的位置:首页 > 运维架构

关于opencv的Mat类型的imwrite()函数写入.jpg图像像素值会改变的解决方案

2017-06-08 17:03 537 查看

#include <string>

#include <opencv2/opencv.hpp>

#include <opencv2/imgproc/imgproc.hpp>

using namespace std;

using namespace cv;

int main(){

 string path = "F:\\example_tongue\\18标定.jpg";

    Mat src = cv::imread(path);

 Mat dst =Mat::zeros(1276,880,CV_8UC3);

 for(int j = 0; j <src.rows; j++)

 {

  for(int i = 0; i<src.cols; i++)//注意:列的最大值是col-1,最小值是0

  {

   uchar *data = (src.data + src.step * j + src.channels()*i);

   uchar *data_a = (dst.data + dst.step * j + dst.channels()*i);

   if(((data[0]==254)&&(data[1]==0)&&(data[2]==0))||((data[0]==255)&&(data[1]==0)&&(data[2]==240)))

   {

    data_a[0]=data[0];

       data_a[1]=data[1];

       data_a[2]=data[2];

   }

   else

   {

    data_a[0]=0;

       data_a[1]=0;

       data_a[2]=0;

   }

  }

 }

 imwrite("F:\\eg\\18标定.jpg",dst);

    return 0;

}

对于以上代码的 imwrite("F:\\eg\\18标定.jpg",dst);会使得保存的图像像素不是所赋值的像素值,解决该bug的方法是将图像存储为.tif格式,即 imwrite("F:\\eg\\18标定.tif",dst);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: