Opencv在旋转图像后会增加图像的尺寸。

3

我正在使用Python中的OpenCV旋转图像,但原始图像和结果图像在某些方面是不同的。我是通过以下代码进行变换的:

img = cv2.imread("image.tif")    
new_image = cv2.getRotationMatrix2D((cols / 2, rows / 2), correction_angle, 1)
dst = cv2.warpAffine(img, new_image , (cols, rows))
cv2.imwrite("Rotated_image.tif", dst)
  • 原始图像大小为1.7 Mb,分辨率为300 dpi,颜色空间为YCbCr。
  • 问题在于生成的图像大小为12.5 Mb,96 dpi,颜色空间为RGB,并采用"LZW"压缩!

我的问题是:我能保留原始图像的主要属性吗?为什么旋转图像会以这种方式改变大小?

注意:这两个图像的位深度都为24。

1个回答

0

调用 cv2.imread 仅使用文件名作为第一个参数时,第二个参数将使用默认值 cv.IMREAD_COLOR,关于此参数 文档 中解释如下:

如果设置,则始终将图像转换为三通道的 BGR 彩色图像。

因此,您的图像总是会被转换为 RGB。您可以尝试使用 imread 的第二个参数中的 cv.IMREAD_ANYCOLOR,但我不认为您可以轻松地在其上使用 cv2.warpAffine

存储的DPI信息之间的差异源于您在不包含任何元数据的情况下编写新图像的事实。imwrite允许您指定参数(请参见此处),但是,不幸的是,它们的文档记录不太好。我不确定这种类型的数据是否可以通过OpenCV直接写出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接