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

来源:互联网 发布:rhino mac授权码 编辑:程序博客网 时间:2024/06/06 04:41


#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);

原创粉丝点击