者这里使用opencv3.2 + vs 2015 进行示例:
// bin.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage;
//在你的工程下放一张图片名为6.jpg
srcImage = imread("6.jpg");
imshow("6", srcImage);
if (srcImage.channels() > 1)
cvtColor(srcImage, srcImage, CV_RGB2GRAY);
Mat srcImageBin;
threshold(srcImage, srcImageBin, 128, 255, THRESH_BINARY_INV);
imshow("原始图转化二值图", srcImageBin);
cout << srcImageBin << endl << endl;
//不更改图片质量
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_JPEG_QUALITY); //选择jpeg
compression_params.push_back(255); //在这个填入你要的图片质量(255为无损保存,一定要进行255,否则图像失真)
imwrite("6bin.jpg", srcImageBin,compression_params);
Mat srcImage1;
srcImage1 = imread("6bin.jpg", CV_LOAD_IMAGE_GRAYSCALE);
imshow("6bin", srcImage1);
cout << srcImage1 << endl;
waitKey(0);
return 0;
}
以下为结果示例:可以发现经过参数设置之后保存后的图像没有失真,像素值一样。
这就是6.jpg