Opencv: Why does the file size change when I read and write an image without making any changes?

耗尽温柔 提交于 2019-12-22 23:54:34

问题


I have a list of (.TIFF) files which I am renaming and saving in the same format. I am using cv2 module to do this.

import cv2
import os
import glob

os.chdir('C:/99_Temp/')

for file in glob.glob("*.tiff"):
   f = os.path.splitext(file)
   time_val = f[0][:2]
   a1 = cv2.imread(file)
   cv2.imwrite(time_val+'.tiff',a1)

Why are the file sizes reduced from the original TIFF file? I haven't done any processing and visually the images look the same. But I am wondering, why the difference?


回答1:


There could be many explanations of why the size of a TIFF file changes. Here are a few:

  • one file may be RGB with 3 bytes of red, green and blue per pixel, while another encoder may see that the file has fewer than 256 colours and decide to write a single byte of palette index per pixel (and store the 256 colours in a separate palette) rather than 3 bytes of RGB.

  • one file may be 8-bit, the other may be 1-bit (bi-level), 16 bit, 32-bit or 64-bit.

  • the files may have different compression - varying through none, to LZW, RLE or more recently JPEG.

  • one coder may have written IPTC or other metadata, whilst the other discarded it.

  • one coder may have included a low resolution preview, the other not.


In order to check, you could use exiftool which is just a Perl script and simple and small to install:

exiftool image.tif

Sample Output

ExifTool Version Number         : 11.11
File Name                       : image.tif
Directory                       : .
File Size                       : 91 kB
File Modification Date/Time     : 2018:11:28 09:38:03+00:00
File Access Date/Time           : 2018:12:05 13:15:15+00:00
File Inode Change Date/Time     : 2018:12:05 13:15:10+00:00
File Permissions                : rw-r--r--
File Type                       : TIFF
File Type Extension             : tif
MIME Type                       : image/tiff
Exif Byte Order                 : Little-endian (Intel, II)
Image Width                     : 784
Image Height                    : 1466
Bits Per Sample                 : 8
Compression                     : LZW
Photometric Interpretation      : BlackIsZero
Strip Offsets                   : (Binary data 827 bytes, use -b option to extract)
Samples Per Pixel               : 1
Rows Per Strip                  : 10
Strip Byte Counts               : (Binary data 642 bytes, use -b option to extract)
Planar Configuration            : Chunky
Predictor                       : Horizontal differencing
Image Size                      : 784x1466
Megapixels                      : 1.1

Or tiffinfo which comes with libtiff and is also pretty small and easy to install:

tiffinfo image.tif

Sample Output

TIFF Directory at offset 0x16894 (92308)
  Image Width: 784 Image Length: 1466
  Bits/Sample: 8
  Compression Scheme: LZW
  Photometric Interpretation: min-is-black
  Samples/Pixel: 1
  Rows/Strip: 10
  Planar Configuration: single image plane
  Predictor: horizontal differencing 2 (0x2)

Or ImageMagick which is installed on most Linux distros and is available for macOS and Windows - but is quite a large install:

magick identify -verbose image.tif

Sample Output

Image: image.tif
  Format: TIFF (Tagged Image File Format)
  Mime type: image/tiff
  Class: DirectClass
  Geometry: 784x1466+0+0
  Units: PixelsPerInch
  Colorspace: Gray
  Type: Grayscale
  Endianess: LSB
  Depth: 8-bit
  Channel depth:
    Gray: 8-bit
  Channel statistics:
    Pixels: 1149344
    Gray:
  ...
  ...
  Matte color: grey74
  Background color: white
  Border color: srgb(223,223,223)
  Transparent color: none
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 784x1466+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: LZW
  Orientation: TopLeft
  Properties:
    date:create: 2018-12-05T13:15:10+00:00
    date:modify: 2018-11-28T09:38:03+00:00
    signature: 5f9afdc8efd4757daa7f6bdba105f6ae149833c1c8103dd544f0073bb302069d
    tiff:alpha: unspecified
    tiff:endian: lsb
    tiff:photometric: min-is-black
    tiff:rows-per-strip: 10
  Artifacts:
    verbose: true
  Tainted: False
  Filesize: 93622B
  Number pixels: 1.14934M
  Pixels per second: 114.935MP
  User time: 0.010u
  Elapsed time: 0:01.009
  Version: ImageMagick 7.0.8-14 Q16 x86_64 2018-11-16 https://imagemagick.org


来源:https://stackoverflow.com/questions/53630689/opencv-why-does-the-file-size-change-when-i-read-and-write-an-image-without-mak

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!