python cv2 이미지 품질 압축 알고리즘 예제
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):
![](https://s1.md5.ltd/image/7f8a812e55a94e532b629346b5b73209.jpg)
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])
결과:![](https://s1.md5.ltd/image/1617b085a9f26fea9318664241f97889.jpg)
압축 후 이미지 크기 는 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])
결과:![](https://s1.md5.ltd/image/d60a5ce3ef1a1d241ff2c1149af20b34.jpg)
압축 후 이미지 크기 는 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 이미지 품질 압축 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.