图像处理——如何处理不同格式和深度的图像确保清晰度满足要求

1、有些模型只识别.jpg或.png格式的图像,如何将其他格式转换成.jpg或.png格式,且尽可能降低图像质量损失?解决方案如下:

import cv2

image = cv2.imread('source.tif')

num_jpg = 100
# num_jpg表示图像质量,取值0~100,值越大,图像越清晰,占用内存也越大
cv2.imwrite('target.jpg', image, [int(cv2.IMWRITE_JPEG_QUALITY), num_jpg])

num_png = 9
# num_png表示压缩级别,取值0~9,值越大,图像压缩程度越大,占用内存越小,清晰度变化不明显
cv2.imwrite('target.png', image, [int(cv2.IMWRITE_PNG_COMPRESSION), num_png])

2、原始图像是16位的,如何确保读取、显示、保存时还是16位的?对比发现,cv2比Image和plt功能强:
Image 读取OK 显示NG 保存OK
cv2 读取OK 显示OK 保存OK
plt 读取OK 显示OK 保存NG

import numpy as np
from PIL import Image

# 读取图像
image = Image.open('source.tif')
# 无法显示图像,显示一片空白
image.show()
# 可以是.png/.tif/.tiff后缀,但不可以是.jpg后缀,否则16位被压缩为8位
image.save('source.png')
# 打印图像
image = np.array(image)
print(image)

在这里插入图片描述

import cv2

# 读取图像
image = cv2.imread('source.tif', cv2.IMREAD_UNCHANGED)
# 正常显示图像,灰度值为16位,如果显示器是8位的,color值也是8位的
# x,y = pyautogui.position()
# color = pyautogui.screenshot().getpixel((x,y))
cv2.imshow('source',image)
cv2.waitKey()
# 可以是.png/.tif/.tiff后缀,但不可以是.jpg后缀,否则16位被压缩为8位
cv2.imwrite('source.png', image)
# 打印图像
print(image)

在这里插入图片描述

import matplotlib.pyplot as plt

# 读取图像
image = plt.imread('source.tif')
# 正常显示图像,灰度值为16位,如果显示器是8位的,color值也是8位的
# x,y = pyautogui.position()
# color = pyautogui.screenshot().getpixel((x,y))
plt.imshow(image,'gray')
plt.show()
# 无论是.png/.tif/.tiff后缀,还是.jpg后缀,都直接保存为32位
plt.imsave('source.png', image)
# 打印图像
print(image)

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值