将RGBA格式的png图片转为RGB格式,即32位png图片转为24位,通道数量由4通道变为3通道
下面是程序源码:
#include <iostream>
#include <stdio.h>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>
using namespace std;
using namespace cv;
#define OPENING_PICS_NUM 51
#define ENDING_PICS_NUM 80
void changeImageRBG24(const char *inPath, const char *outPath, int start, int num) {
char tmp[100] = { 0 };
cout << "Start ChangeImage: \n";
Mat mRead;
Mat mRGB888;
vector<int> params;
params.push_back(CV_IMWRITE_PNG_COMPRESSION);
params.push_back(0);
for (int i = start; i < start + num; i++) {
sprintf(tmp, inPath, i);
//cout << "<<<<" << tmp << endl;
mRead = imread(tmp, IMREAD_UNCHANGED);
cvtColor(mRead, mRGB888, CV_RGB2BGR);
sprintf(tmp, outPath, i);
cout << ">>>>" << tmp << endl;
imwrite(tmp, mRGB888, params);
}
cout << "ChangeImage End\n";
}
int main()
{
changeImageRBG24("D:/temp/RGBA/opening/39_opening_170329_00%03d.png",
"D:/temp/RGB888/opening/39_opening_170329_00%03d.png",
470, OPENING_PICS_NUM);
changeImageRBG24("D:/temp/RGBA/ending/40_ending_170329_00%03d.png",
"D:/temp/RGB888/ending/40_ending_170329_00%03d.png",
690, ENDING_PICS_NUM);
waitKey(0);
return 0;
}