Python 创建的文件大小与matlab imwrite和cv2 imwrite不同

Python 创建的文件大小与matlab imwrite和cv2 imwrite不同,python,matlab,opencv,Python,Matlab,Opencv,我正在将一个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)

我正在将一个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保存的文件大小=[21,21,30,21,21,21,21,21]

mat保存的文件大小=[17,17,24,17,17,17,17,17]


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

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

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