python - 将图像的内存大小从RGB增加到Grey,OpenCV

标签 python opencv memory-management opencv-python image-conversion

我已经开始深入研究图像处理。好奇地知道一个简单问题的答案(我尝试使用谷歌搜索,但我想找不到令人满意的答案):
我有一个RGB图像:
enter image description here
然后我应用了简单的OpenCV命令:
img = cv2.imread(r'E:\ opencv \ elephant.jpg',0)
cv2.imwrite('updated_elephant.jpg',img)
最后得到输出图像:
see the memory used which is more than RGB image
回到问题,为什么输出图像的大小会增加?(cv2.cvtColor()函数也会发生同样的事情)任何与之相关的见解或示例都将受到赞赏。
感谢您的真诚关注。

最佳答案

JPEG是一种有损格式,在Wikipedia上有很好的描述。阅读。
允许编码器决定如何编码数据。一些会以一种方式对颜色进行下采样,而另一些会以其他方式进行,而另一些则完全不进行色度二次采样。
一些编码器将使用整数进行量化,因为在某些处理器上它会更快,而其他编码器则可能使用浮点,因为它们更重视精度。
一些编码器使用JPEG建议的系数表来丢弃高频,一些编码器使用自己的表-这是quality设置。
因此,您可能会在不同平台上,或在具有不同编码器的同一平台上,或在具有相同编码器但软件版本不同的同一平台上,获得不同的文件大小和格式。

如果您想更详细地了解色度二次采样和质量设置,请在终端中使用 ImageMagick :

magick identify -verbose YOURIMAGE.JPG info:

如果您想花几个小时详细研究JPEG,我向您推荐这一系列视频-link

关于python - 将图像的内存大小从RGB增加到Grey,OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62726603/

相关文章:

python - 正则表达式贪心问题

python - 分隔字符串

python - 从 python 脚本调用 hive -e

python - 我试图找出背景是彩色的还是单色的

java - 内存是否分配给了 switch block 中的所有字符串?

c++ - 为什么我不能通过指针从数组中删除非第一个元素

python - 将 StringIO 对象转换为 Django ImageFile

python - 列出对opencv bgr的理解,以对调色板进行十六进制合并。 TypeError:无法解压缩不可迭代的numpy.uint8对象

python - OPENCV:以可变帧速率提取视频中帧的生命周期

node.js - 在 node.js 中避免 "system out of memory"的最佳方法是什么?