使用 Opencv 将 jpg 图像转换为 ppm P3 ASCII 格式
Convert jpg image in ppm P3 ASCII format using Opencv
使用 opencv imwrite 函数我成功地将 jpg 图像转换为 ppm P6 格式。
Mat image = imread(picPath);
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PXM_BINARY);
compression_params.push_back(1);
imwrite("bez.ppm", image, compression_params);
问题是我实际上必须将 jpg 图像转换为 ppm P3 ASCII 格式。
有谁知道该怎么做?
谢谢!
编辑:
在项目中,我有以下代码检查像素的最大值:
int maxVal;
fscanf(in, "%d", &maxVal);
if (maxVal != 255)
{
printf("Input file error: Not a Netpbm color image with 256 levels\n");
exit(0);
}
当我设置参数 0 时,我得到:不是 256 级的 Netpbm 彩色图像!
当我使用 irfanview 程序将 jpg 转换为 ppm p3 时,工作正常。
涉及的代码在OpenCV源码树的modules/imgcodecs/src/grfmt_pxm.cpp
文件中
它根据压缩参数设置内部标志isBinary
:
for( size_t i = 0; i < params.size(); i += 2 )
if( params[i] == CV_IMWRITE_PXM_BINARY )
isBinary = params[i+1] != 0;
所以,如果你想要 ASCII (P3),你需要
compression_params.push_back(0)
并且图像类型为 CV_8UC1、CV_8UC3 或 CV_16UC1。
使用 opencv imwrite 函数我成功地将 jpg 图像转换为 ppm P6 格式。
Mat image = imread(picPath);
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PXM_BINARY);
compression_params.push_back(1);
imwrite("bez.ppm", image, compression_params);
问题是我实际上必须将 jpg 图像转换为 ppm P3 ASCII 格式。 有谁知道该怎么做? 谢谢!
编辑:
在项目中,我有以下代码检查像素的最大值:
int maxVal;
fscanf(in, "%d", &maxVal);
if (maxVal != 255)
{
printf("Input file error: Not a Netpbm color image with 256 levels\n");
exit(0);
}
当我设置参数 0 时,我得到:不是 256 级的 Netpbm 彩色图像!
当我使用 irfanview 程序将 jpg 转换为 ppm p3 时,工作正常。
涉及的代码在OpenCV源码树的modules/imgcodecs/src/grfmt_pxm.cpp
文件中
它根据压缩参数设置内部标志isBinary
:
for( size_t i = 0; i < params.size(); i += 2 )
if( params[i] == CV_IMWRITE_PXM_BINARY )
isBinary = params[i+1] != 0;
所以,如果你想要 ASCII (P3),你需要
compression_params.push_back(0)
并且图像类型为 CV_8UC1、CV_8UC3 或 CV_16UC1。