1. 程式人生 > >關於opencv的Mat型別的imwrite()函式寫入.jpg影象畫素值會改變的解決方案

關於opencv的Mat型別的imwrite()函式寫入.jpg影象畫素值會改變的解決方案



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