如何 cv2.imencode 和 imdecode (jpeg) 来获取不同的 QF 值?

问题描述

我需要使用 open cv 函数cv2.imencode,cv2.imdecode 来压缩 (jpeg) 和解压缩 (jpeg) 以获得不同的 QF 值。 图片是来自https://imagecompression.info/test_images/

的“bridge.ppm

我试过了:

bridge = cv2.imread('./bridge.ppm')
bridge_en = cv2.imencode('.jpeg',bridge)
bridge_de = cv2.imdecode('.jpeg',bridge_en)
cv2.imshow('image',bridge_de)

但我在第 2 行收到错误消息:"Expected Ptr<cv::UMat> for argument 'buf'".

另外,如何更改和测试不同的 QF 值?

解决方法

请查看 imencodeimdecode

的文档

imencode 返回两个值,编码的缓冲区是第二个。并且 imdecode 接受编码的缓冲区和一个标志。所以:

bridge = cv2.imread('./bridge.ppm')
bridge_en = cv2.imencode('.jpeg',bridge)[1] # you need the second value
bridge_de = cv2.imdecode(bridge_en,cv2.IMREAD_UNCHANGED) # or any other flag,same as 'imread'
cv2.imshow('image',bridge_de)