【python 图像压缩算法】opencv图像压缩

插值方法:
CV_INTER_NN - 最近邻插值,
CV_INTER_LINEAR - 双线性插值 (缺省使用)
CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法..
CV_INTER_CUBIC - 立方插值.
函数 cvResize 将图像 src 改变尺寸得到与 dst 同样大小。若设定 ROI,函数将按常规支持 ROI.

程序1:图像压缩(第一版)

# coding=utf-8
import time
time1 = time.time()
import cv2
image=cv2.imread("c:/1.jpg")
res = cv2.resize(image, (1280,960), interpolation=cv2.INTER_AREA)
# cv2.imshow('image', image)
# cv2.imshow('resize', res)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
cv2.imwrite("C:/5.jpg",res)
time2=time.time()
print u'总共耗时:' + str(time2 - time1) + 's'

4.19M—377k 压缩了11倍

程序2:图像压缩(第二版)

#-*-coding:utf-8-*-
#############设置编码################
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

###################导入计算机视觉库opencv和图像处理库PIL####################
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageFilter
import cv2
import time
time1 = time.time()
####################读入图像###############################
image=cv2.imread("c:/pic//0.jpg")

####################双三次插值#############################
res = cv2.resize(image, (1280,960), interpolation=cv2.INTER_AREA)

####################写入图像########################
cv2.imwrite("C:/pic/101.jpg",res)

###########################图像对比度增强##################
imgE = Image.open("c:/pic/101.jpg")
imgEH = ImageEnhance.Contrast(imgE)
img1=imgEH.enhance(2.8)

########################图像转换为灰度图###############
gray = img1.convert("L")
gray.save("C:/pic/3.jpg")

##########################图像增强###########################

# 创建滤波器,使用不同的卷积核
gary2=gray.filter(ImageFilter.DETAIL)
gary2.save("C:/pic/2.jpg")

#############################图像点运算#################
gary3=gary2.point(lambda i:i*0.9)
gary3.save("C:/pic/4.jpg")
# img1.show("new_picture")
time2=time.time()
print u'总共耗时:' + str(time2 - time1) + 's'

4.17M–>290kb

程序3:函数版本

#-*-coding:utf-8-*-
#############设置编码################
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

############导入计算机视觉库opencv和图像处理库PIL####################
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageFilter
import cv2
import time
time1 = time.time()

########################自定义图像压缩函数############################
def img_zip(path,filename1,filename2):
    image = cv2.imread(path+filename1)
    res = cv2.resize(image, (1280, 960), interpolation=cv2.INTER_AREA)
    cv2.imwrite(path+filename2, res)
    imgE = Image.open(path+filename2)
    imgEH = ImageEnhance.Contrast(imgE)
    img1 = imgEH.enhance(2.8)
    gray1 = img1.convert("L")
    gary2 = gray1.filter(ImageFilter.DETAIL)
    gary3 = gary2.point(lambda i: i * 0.9)
    gary3.save(path+filename2)

################################主函数##################################
if __name__ == '__main__':
    path=u"c:/pic/"
    filename1="0.jpg"
    filename2="1.jpg"
    img_zip(path,filename1,filename2)
    time2 = time.time()
    print u'总共耗时:' + str(time2 - time1) + 's'
  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Python中有几种常用的方法可以使用OpenCV来压缩图片。 1. 调整图片质量:可以使用cv2.IMWRITE_JPEG_QUALITY参数来调整JPEG格式图片的压缩质量。该参数的范围是0(最低质量)到100(最高质量)。默认值是95。你可以根据你的需求将该值设置为合适的数值。较低的数值会减小图片文件的大小,但会引入一定程度的失真。例如,可以使用以下代码将图片压缩到指定质量: ```python import cv2 image = cv2.imread("image.jpg") cv2.imwrite("compressed_image.jpg", image, [cv2.IMWRITE_JPEG_QUALITY, 70]) ``` 2. 调整图片大小:另一种常见的压缩图片的方法是调整图片的大小。可以使用cv2.resize()函数来调整图片的尺寸。通过改变图片的宽度和高度,可以减小图片文件的大小。以下代码将调整图片的宽度和高度: ```python import cv2 image = cv2.imread("image.jpg") resized_image = cv2.resize(image, (800, 600)) cv2.imwrite("compressed_image.jpg", resized_image) ``` 3. 采用图像编码算法OpenCV还支持其他图像编码算法来压缩图片,如PNG编码算法和WEBP编码算法。通过设置不同的编码标志,可以选择使用不同的算法进行图片压缩。例如,通过设置cv2.IMWRITE_PNG_COMPRESSION参数为3,可以使用PNG编码算法压缩图片: ```python import cv2 image = cv2.imread("image.jpg") cv2.imwrite("compressed_image.png", image, [cv2.IMWRITE_PNG_COMPRESSION, 3]) ``` 总之,Python中的OpenCV库提供了多种方法来对图片进行压缩。你可以根据实际需求选择合适的方法。 ### 回答2: Python中的OpenCV库提供了多种压缩图片算法。其中一个常用的方法是使用cv2.imwrite()函数保存图像时,使用不同的参数来调整图像的压缩比例。该函数的参数之一是保存质量,可以设置为0-100的整数值。较高的值表示更高的质量和较小的压缩比例,较低的值表示低质量和较高的压缩比例。 另一种压缩算法是使用cv2.imencode()函数,将图像编码为特定格式(如JPEG或PNG),然后将编码后的图像数据保存到内存中。这个方法允许我们更精确地控制压缩参数,如压缩比、色彩空间和格式。 下面是一个示例代码,演示了如何使用cv2.imencode()函数来压缩图像: ``` import cv2 import numpy as np def compress_image(image_path, output_path, quality=50): # 读取图像 image = cv2.imread(image_path) # 选择压缩参数 encode_param = [cv2.IMWRITE_JPEG_QUALITY, quality] # 压缩图像 _, compressed_image = cv2.imencode('.jpg', image, encode_param) # 将压缩后的图像保存到文件 with open(output_path, 'wb') as file: file.write(np.array(compressed_image)) # 调用函数进行压缩 compress_image('input.jpg', 'output.jpg', quality=50) ``` 上述代码将图像从文件中读取,并使用JPEG格式进行压缩。压缩后的图像数据保存在内存中,并最后写入到输出文件中。可以通过调整quality参数来控制压缩质量。 总之,Python中的OpenCV库提供了多种压缩图像的方法,开发者可以根据实际需要选择合适的方法和参数进行压缩。 ### 回答3: Python OpenCV提供了多种图像压缩算法,旨在减少图像文件的大小。下面是几种常用的算法: 1. JPEG压缩算法: JPEG是一种有损压缩算法,可以通过调整压缩参数来平衡图像质量和压缩比。在OpenCV中,可以通过指定`cv2.IMWRITE_JPEG_QUALITY`参数来控制压缩质量,范围为0到100,值越高表示质量越好,文件大小越大。 ```python cv2.imwrite("compressed.jpg", image, [cv2.IMWRITE_JPEG_QUALITY, 90]) ``` 2. PNG压缩算法: PNG是一种无损压缩算法,可以保留图像的完整质量,但通常会生成较大的文件。在OpenCV中,可以通过指定`cv2.IMWRITE_PNG_COMPRESSION`参数来控制压缩级别,范围为0到9,值越高表示压缩越强,生成的文件越小。 ```python cv2.imwrite("compressed.png", image, [cv2.IMWRITE_PNG_COMPRESSION, 5]) ``` 3. WEBP压缩算法: WEBP是一种现代化的图像压缩格式,结合了有损和无损的压缩算法。在OpenCV中,可以通过指定`cv2.IMWRITE_WEBP_QUALITY`参数来控制有损压缩的质量,范围为0到100,值越高表示质量越好,文件大小越大。 ```python cv2.imwrite("compressed.webp", image, [cv2.IMWRITE_WEBP_QUALITY, 80]) ``` 通过选择适当的压缩算法和参数,可以在图像文件大小和质量之间进行权衡,以满足具体的需求。需要注意的是,图像压缩往往会引入一定程度的信息损失,因此需要根据具体应用场景进行选择。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东华果汁哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值