创建的文件大小与 Matlab Imwrite 和 CV2 Imwrite 不同



我正在将 matlab 脚本转换为 py 文件。最少的 Matlab 代码:

% PNG file is 32 bit. G is RGB and discardIMG is alpha channel
[G, map, discardIMG] = imread('file.png');
discardIMG = double(discardIMG);
discard = mod(floor(discardIMG / 2^(i - 1)), 2);
imwrite(uint8(255 * discard), 'file.png';

我输入的py等效物:

% imread with -1 reads all 4 channels. Without it only RGB is read.
G = cv2.imread('file.png', -1)
% alpha channel as discard image
discardIMG = G[:,:,3].astype(float)
discard = np.floor( (discardIMG / 2**(i - 1))% 2)   
cv2.imwrite('file2.png', (255*discard).astype(np.uint8))

问题是 matlab 文件的大小比 py 文件小。对于 8 个文件;

py saved file size = [21,21,30,21,21,21,21,21]

mat saved file size = [17,17,24,17,17,17,17,17]

我还检查了最终丢弃的文件,它们在内容和大小上看起来确实相同。有什么想法吗?py 文件的开销是多少。谢谢。

如果你从这里看cv2.imwrite的官方文档 这是因为压缩参数。对于 png 图像,默认参数为 3。 值越高意味着尺寸越小,压缩时间越长,反之亦然。因此,您可以提供如下所示的另一个参数,对于 png 图像,它可以是 0 到 9 之间的任何值。

cv2.imwrite('file2.png', (255*discard).astype(np.uint8), [cv2.IMWRITE_PNG_COMPRESSION, 9])

相关内容

  • 没有找到相关文章

最新更新