python cv 2画質圧縮のアルゴリズム例


opencvを使って画像を符号化する一方で、画像をバイナリ伝送する必要がある一方で、画像を圧縮する。jpeg圧縮を例として:
1、バイナリコードに変換

img = cv2.imread(img_path)
#     :0~100,    ,     ,         
params = [cv2.IMWRITE_JPEG_QUALITY, ratio]  # ratio:0~100
msg = cv2.imencode(".jpg", img, params)[1]
msg = (np.array(msg)).tobytes()
print("msg:", len(msg))
png圧縮に対して、

#     :0~9,    ,     ,      
params = [cv2.IMWRITE_PNG_COMPRESSION, ratio]  # ratio: 0~9
msg = cv2.imencode(".png", img, params)[1]
msg = (np.array(msg)).tobytes()
画像復号には、imdecodeを使用してnumpyタイプの画像に解くことができます。

img = cv2.imdecode(np.frombuffer(msg, np.uint8), cv2.IMREAD_COLOR)
print(img.shape, type(img))
2、画質圧縮
原図(48 k):

jpg圧縮:

img_path = r"E:\img.jpg"
img = cv2.imread(img_path)
cv2.imwrite(r"E:\ret_80.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 80])
cv2.imwrite(r"E:\ret_40.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 40])
cv2.imwrite(r"E:\ret_10.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 10])
cv2.imwrite(r"E:\ret_0.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 0])
結果:

圧縮された画像のサイズは、49.6 K、25.6 K、11 K、5.02 Kの順である。jpg圧縮は明らかで、極限まで圧縮すると色情報の損失が大きいです。
png圧縮:

img_path = r"E:\img.jpg"
img = cv2.imread(img_path)
cv2.imwrite(r"E:\ret_0.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 0])
cv2.imwrite(r"E:\ret_3.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 3])
cv2.imwrite(r"E:\ret_6.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 6])
cv2.imwrite(r"E:\ret_9.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 9])
結果:

圧縮された画像のサイズは、順次675 K、364 K、364 K、360 Kである。pngのフォーマットは大きすぎて、圧縮率が最高になっても360 Kがあります。そしてイメージングには明らかな変化がありません。
PS:画像を圧縮して保存することもできます。

img_path = r"E:\img.jpg"
img = cv2.imread(img_path)
params = [cv2.IMWRITE_PNG_COMPRESSION, 0]
msg = cv2.imencode(".png", img, params)[1]
msg = (np.array(msg)).tobytes()
print("msg:", len(msg))
img = cv2.imdecode(np.frombuffer(msg, np.uint8), cv2.IMREAD_COLOR)
cv2.imwrite(rr"E:\ret.jpg", img)
バグ処理:
初期バージョンはこのように書きます。

msg = (np.array(msg)).tostring()
  :
msg = (np.array(msg)).tobytes()
 
img = cv2.imdecode(np.fromstring(msg, np.uint8), cv2.IMREAD_COLOR)
  :
img = cv2.imdecode(np.frombuffer(msg, np.uint8), cv2.IMREAD_COLOR)
ここでは、python cv 2の画像品質圧縮のアルゴリズム例についての記事を紹介します。python cv 2の画像品質に関する圧縮の内容については、以前の記事を検索したり、以下の関連記事を見たりしてください。これからもよろしくお願いします。