#include<opencv2/core/core.hpp>#include<opencv2/imgproc/imgproc.hpp>#include<opencv2/highgui/highgui.hpp>#include<iostream>voidJpegcompress(const cv::Mat& src, cv::Mat& dest,int quality){
std::vector<uchar> buff;
std::vector<int> params;/*IMWRITE_JPEG_QUALITY For JPEG, it can be a quality from 0 to 100
(the higher is the better). Default value is 95 */
params.push_back(cv::IMWRITE_JPEG_QUALITY);
params.push_back(quality);//将图像压缩编码到缓冲流区域
cv::imencode(".jpg", src, buff, params);//将压缩后的缓冲流内容解码为Mat,进行后续的处理
dest = cv::imdecode(buff,-1);
cv::imshow("src", src);
cv::imshow("dst", dest);}intmain(){
std::string fileName ="test.jpg";
cv::Mat src = cv::imread(fileName,-1);if(src.empty()){
std::cerr<<" image open error!\n";return0;}
cv::Mat dest;//质量等级为设为50Jpegcompress(src,dest,50);////cv2.IMWRITE_JPEG_QUALITY类型为 long ,必须转换成 int//cv2.IMWRITE_PNG_COMPRESSION, 从0到9 压缩级别越高图像越小。
std::vector<int> params;/*IMWRITE_JPEG_QUALITY For JPEG, it can be a quality from 0 to 100
(the higher is the better). Default value is 95 */
params.push_back(cv::IMWRITE_JPEG_QUALITY);
params.push_back(98);
cv::imwrite('1.png',src, params)//cv::imwrite('1.png',src, [int(cv::IMWRITE_PNG_COMPRESSION), 9])cvWaitKey(0);return0;}
读取二进制文件
/**参考地址:https://www.cnblogs.com/rainbow70626/p/8371743.html**/#include<string>#include<stdio.h>#include<iostream>#include<opencv2/opencv.hpp>//#include <opencv2/imgcodecs/legacy/constants_c.h>typedefunsignedcharuchar_t;intread(){uchar_t buf[300]={'0'};#ifdef_WIN32
FILE* pf =NULL;errno_t err ;if((err =fopen_s(&pf,"conv.bin","rb"))!=0){printf("The file 'conv.bin' was not opened\n");return-1;}else{fread_s(buf,1024,sizeof(char),253, pf);}if(fclose(pf)){printf("The file ptr was not closed\n");}#else
FILE* pf =fopen("conv.bin","rb");fread(buf,sizeof(char),253, pf);fclose(pf);#endifreturn0;}intmain(int argc,char** argv){constchar* binfilePath ="../1.jpg";
FILE* pFile;#if_WIN32size_t err =fopen_s(&pFile, binfilePath,"rb");#else
pFile =fopen(binfilePath,"rb");#endiffseek(pFile,0,SEEK_END);long lSize =ftell(pFile);rewind(pFile);char* pData = new char[lSize];fread(pData,sizeof(char), lSize, pFile);fclose(pFile);//! 解码内存数据,变成cv::Mat数据
std::vector<uchar> data;for(int i =0; i < lSize;++i){
data.push_back(pData[i]);}
delete[] pData;
pData =NULL;
cv::Mat img = cv::imdecode(data, cv::IMREAD_COLOR);
cv::imshow("windows_0", img);
cv::waitKey(0);return0;}