Opencv 为什么在使用cv2.imwrite()保存时图像大小会增加

Opencv 为什么在使用cv2.imwrite()保存时图像大小会增加,opencv,matplotlib,image-processing,scipy,Opencv,Matplotlib,Image Processing,Scipy,我对输入图像进行了一些处理,并使用cv2.imwrite方法保存了最终图像,输入图像大小为1.2MB(3120*4160像素),保存的图像大小为2.8MB(3111*4151),是输入图像大小的两倍多 经过一些研究,我发现opencv以16位速率保存图像,因此我使用scipy.misc.imsave保存图像,这解决了我的问题,结果大小减小到1.1MB,但颜色贴图发生变化,原始图像和处理后的图像颜色不相同 谁能解释一下为什么会这样?为什么在cv2写入方法的情况下图像大小几乎是原来的两倍,为什么我使

我对输入图像进行了一些处理,并使用cv2.imwrite方法保存了最终图像,输入图像大小为1.2MB(3120*4160像素),保存的图像大小为2.8MB(3111*4151),是输入图像大小的两倍多

经过一些研究,我发现opencv以16位速率保存图像,因此我使用scipy.misc.imsave保存图像,这解决了我的问题,结果大小减小到1.1MB,但颜色贴图发生变化,原始图像和处理后的图像颜色不相同

谁能解释一下为什么会这样?为什么在cv2写入方法的情况下图像大小几乎是原来的两倍,为什么我使用scipy写入方法时会丢失颜色

from matplotlib import pyplot
import cv2
from scipy.misc import imsave
'''
read the input image here (jpg format) and image segmentation code here
'''
pyplot.imsave('py_result.jpg', final_img) #this one doubles the image size and also changes the color, why is there a size bump?   
cv2.imwrite('cv2_result.jpg', final_img) #this one almost doubles the image size
imsave('scipy_result.jpg', final_img) #this one doesnot bump the image size but changes the color in output image
以下是供参考的图片:

这是输入图像

您可以看到,使用scipy.imsave()保存的已处理图像已由输入图像中的蓝色文本变为红色


1)您没有显示任何代码,这很可能就是为什么似乎没有人愿意回答您的问题。请看:2)我猜,您的输入图像是JPG格式的!?在OpenCV中,是否也保存为JPG?如果是,您使用哪种压缩?或者,是否另存为PNG,这很可能会生成更大的文件?3) 对于
scipy.imsave()
,蓝色和红色通道似乎已切换。OpenCV使用BGR颜色顺序,可能scipy使用RGB。@HansHirse很抱歉我没有附加代码,我现在就做了,我想关于颜色变化的原因你是对的,OpenCV将图像视为BGR,而其他RGB。但是为什么尺寸会变大呢?输入和输出图像均为jpg格式。感谢您抽出时间。OpenCV文档开启:对于JPEG,它的质量可以是0到100(越高越好)。默认值为95。也许,您输入的压缩更低!?此外,从您的代码中还不清楚读取和保存之间会发生什么。您是否可能执行一些从
CV_8UC3
CV_16UC3
的转换操作(隐式)!?请提供一个答案,其他一切都是进一步的猜测。处理将是以下代码:,除了我在灰度图像上应用了阈值,我没有在任何地方将CV_8UC3更改为CV_16UC3,根据其中一个答案(我找不到帖子),我读到opencv以16比特率写入图像,这就是为什么会出现凹凸。但我不确定。在我的代码中的某个地方,如果我做了一些可能增加了图像大小的东西,
scipy.misc.imsave()
不应该减少图像大小。所以我认为这是opencv如何保存图像的问题。请再读一遍。如果我们不能重现您的问题,我们就无法找出发生了什么或为什么会发生。