在OpenCV中保存图像以增加图像大小

在OpenCV中保存图像以增加图像大小,opencv,image-processing,imread,Opencv,Image Processing,Imread,我已经问过这个问题了,我没有得到满意的答案,所以我做了更多的研究,我正在以更好的方式提出这个问题。我通过OpenCVimread方法读取图像。我用imwrite方法保存了它。它将输出文件大小增加了一倍以上 下面是我从imagemagick获得的图像的详细信息(我没有写下所有的详细信息,我正在附上图像,因为所有的细节都是必需的): 输入图像: 格式:JPEG(联合摄影专家组JFIF格式) Mime类型:图像/jpeg 类别:DirectClass 几何图形:1836x326+0+0 决议:72

我已经问过这个问题了,我没有得到满意的答案,所以我做了更多的研究,我正在以更好的方式提出这个问题。我通过
OpenCV
imread
方法读取图像。我用
imwrite
方法保存了它。它将输出文件大小增加了一倍以上

下面是我从imagemagick获得的图像的详细信息(我没有写下所有的详细信息,我正在附上图像,因为所有的细节都是必需的):

输入图像:

  • 格式:JPEG(联合摄影专家组JFIF格式)
    • Mime类型:图像/jpeg
    • 类别:DirectClass
    • 几何图形:1836x326+0+0
    • 决议:72x72
    • 打印尺寸:25.5x45.3333
    • 单位:像素像素像素
    • 类型:真彩色
    • Endianess:未定义
    • 色彩空间:sRGB
    • 深度:8位
    • 航道深度: 红色:8位 绿色:8位 蓝色:8位
    • 频道统计: 像素:5992704
    • 压缩:JPEG
    • 品质:75
    • 文件大小:267KB
    • 像素数:5.993M
输出图像:

  • 格式:JPEG(联合摄影专家组JFIF格式)
    • Mime类型:图像/jpeg
    • 类别:DirectClass
    • 几何图形:1836x326+0+0
    • 单位:未定义
    • 类型:真彩色
    • Endianess:未定义
    • 色彩空间:sRGB
    • 深度:8位
    • 航道深度: 红色:8位 绿色:8位 蓝色:8位
    • 频道统计: 像素:5992704
    • 压缩:JPEG
    • 质量:95
    • 文件大小:611KB
    • 像素数:5.993M
如您所见,输入图像大小为267KB,但输出图像大小为611KB。现在我知道它的大小取决于编码器、压缩值、比特率等。我想知道我是否可以将图像保存为与输入图像完全相同的大小

我还尝试在
openCV
中使用压缩,如
cv2.imwrite('result.jpg',image,[int(cv2.imwrite\u JPEG\u QUALITY),45])
这里的图像质量将是45,但图像大小仍将大于输入图像(约300KB)。我不想小于45,因为这会影响图像细节和数据丢失

我尝试使用外部库,如scipy、matplotlib。但它们都会影响图像大小

任何关于输出图像增加的原因以及我们如何修复它的线索都非常感谢。谢谢

这里有一些代码供参考

import cv2 #opencv library for image processing implementations 

def main():   
    im = cv2.imread('sample.jpg')
    cv2.imwrite('result.jpg', im)
    if(__name__=='__main__'):
      main()
这是供参考的图像。
您的原始图像质量为75。如果不使用OpenCV定义保存质量,则默认值为95,因此您应该期望文件更大

如果要将其设置为某个最大大小,可以像这样使用ImageMagick将其设置为300kB:

convert sample.jpg -define jpeg:extent=300k a.jpg
这将得到一个299810字节的文件,质量为83

如果准备允许400kB,则可以使用:

convert sample.jpg -define jpeg:extent=400k a.jpg
这将得到一个358000字节的文件,质量为93



我在Python中编写了类似的东西,允许您使用二进制搜索以指定的大小保存。

如果您以保存或生成原始图像的方式保存图像,您将获得相同的图像,因此图像大小相同。。。你的原始图像来自哪里,一些手机?您是否有任何关于图像存储方式的信息,具体使用哪种(JPEG)压缩?你不能期望任何其他软件具有完全相同的(JPEG)图像保存功能,例如某个设备上的(潜在的)高度适应的图像保存软件,我们不知道你最初使用的是原始图像。恐怕你在这里比较苹果和橙子。嗯,复制一张会产生一张大小完全相同的图像。解压和重新压缩没有意义。@HansHirse我的原始图像来自手机。恐怕我对它使用的JPEG压缩没有任何概念。所以你说,无法从OpenCV以原始大小保存图像。@YvesDaoust我不只是想复制它。当然,在保存图像之前,我想对图像进行一些处理。@BeetiSushruth:如果修改图像,它没有理由保持相同的大小,甚至是大致相同的大小。