python cv2 이미지 품질 압축 알고리즘 예제

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.이미지 품질 압축
원본 그림(48k):

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.6K,25.6K,11K,5.02K 순 으로 나 타 났 다.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)
bug 처리:
초기 버 전 은 이렇게 씁 니 다.

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 cv2 이미지 품질 압축 에 관 한 알고리즘 예제 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 python cv2 이미지 품질 압축 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기