OpenCV imencode pgm 不能编码正确的格式

OpenCV imencode pgm doesn't encode the correct format

本文关键字:格式 编码 imencode pgm 不能 OpenCV      更新时间:2023-10-16

我正试图编码Mat CV_32FC1图像以通过base64通过互联网发送,该过程有效,但OpenCV以错误的格式编码。例子:

vector<unsigned char> buffer;
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PXM_BINARY);
compression_params.push_back(0);
cv::imencode(".pgm", desc, buffer, compression_params);
printf("%s", &buffer[0]);

生成如下输出:

P2
64 15
255
0   0   0   0   1   0   0   0   0   1   0   0   0   0   0   0   1   0   0   0   0   0     0   0   0   0   
etc..

根据压缩参数和第一个参数(P2),它不应该被编码为二进制格式,它应该是ASCII。(源)

这本身不是问题,但是当我将compression_params.push_back(0)更改为compression_params.push_back(1)时,我得到了这个输出(没有图像数据):

P5
64 15
255

我在iOS上使用OpenCV 2.4.4,我怎么能解决这个问题,或者我怎么能在不丢失数据的情况下发送一个好的方式?

不知道你是否已经解决了你的问题,但我发现了这个问题,它可能也适用于你的情况,即使你使用的是iOS版本,我不熟悉:

如何在OpenCV中捕获图像并以pgm格式保存?