關於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);