【问题标题】:I want to save my resize/scaling opencv image with original bit depth?我想用原始位深度保存我的调整大小/缩放opencv图像?
【发布时间】:2020-04-18 00:46:08
【问题描述】:
import cv2
import numpy as np

# load input image:
input = cv2.imread("image.png")  #image.png size has 1.48MB & bit depth: 8

# scaling:
scaled_img = cv2.resize(input,None,fx=0.5,fy=0.5,)
cv2.imshow("Scaling-Linear Interpolation", scaled_img)

#saving the img:
cv2.imwrite("image_resize.png", scaled_img)  # 1.66 MB & bit depth: 24

我想知道为什么原始图像的位深度会发生变化。并且还知道如何根据用户进行更改。

【问题讨论】:

  • image.png的颜色标准是什么?它是灰度图像吗?它是索引图像吗?您可以将图片添加到您的帖子中吗?
  • 不检查源图像,不可能给出一些详细的解释。但是,在编写 PNG 时,OpenCV 默认使用非常低的压缩级别(比不压缩高一级)。它也不支持编写调色板图像。
  • 您的原始图像可能是调色板图像stackoverflow.com/a/52307690/2836621,并且OpenCV在您加载它们时将它们转换为BGR图像,但不支持将调色板图像写回磁盘,因此磁盘文件即使以像素为单位的图像尺寸更小,尺寸也会增加。使用exiftool YourInputImage.png 告诉您输入的图像是什么。

标签: python image opencv resize


【解决方案1】:

opencv imread 始终读取为 3 通道输入,因此它为加载的灰度图像添加 2 个相同的通道。

您可以使用灰度或未更改标志加载为灰度,或使用 cv2.cvtColor 转换为灰度。

查看https://docs.opencv.org/3.4/d4/da8/group__imgcodecs.html#gga61d9b0126a3e57d9277ac48327799c80af660544735200cbe942eea09232eb822 获取标志

因此,目前您正在将单通道 8 位图像文件加载为 3x8=24 位图像。保存为 png 后,它是一个 24 位图像文件。

【讨论】:

  • 我知道,但我想知道 "image_resize.png" 的分辨率已经降低到原来的分辨率,但尺寸没有,而且位深度也发生了变化,我在代码的 cmets 中提到。
  • 位深 24 位是 3x8bit,因为您将 1 通道图像加载为 3 通道图像并保存为 RGB 图像。如果加载为“未更改”或加载后转换为灰度,则保存为 8 位。
猜你喜欢
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 2011-06-04
  • 2013-12-04
相关资源
最近更新 更多