python 图像数据相互转换

1. opencv 和 bytes
# opencv 转 二进制图片
def mat2bytes(image: np.ndarray) -> bytes:
	return np.array(cv2.imencode('.jpg', image)[1]).tobytes()
# 二进制图片 转 opencv
def bytes2mat(image: bytes) -> np.ndarray:
    return cv2.imdecode(np.array(bytearray(image), dtype='uint8'), cv2.IMREAD_UNCHANGED)
2. opencv 和 base64
# opencv 转 base64
def mat2base64(image: np.ndarry) -> str:
    return str(base64.b64encode(cv2.imencode('.jpg',image)[1]))[2:-1]
# base64 转 opencv
def base642mat(image: str) -> np.ndarry:
	return cv2.imdecode(np.fromstring(base64.b64decode(image), np.uint8), cv2.IMREAD_COLOR)
3. opencv 和 PIL
# opencv 转 PIL
def mat2image(image: np.ndarry) -> Image:
    return Image.fromarray(cv2.cvtColor(image,cv2.COLOR_BGR2RGB))
# PIL 转 opencv
def image2mat(image: Image) -> np.ndarry:
    return cv2.cvtColor(np.asarray(image),cv2.COLOR_RGB2BGR)
4. bytes 和 base64
# 二进制图片 转 base64
def bytes2base64(image: bytes) -> str:
	return base64.b64encode(image).decode() 
# base64 转 二进制图片
def base642bytes(image: str) -> bytes:
    return base64.b64decode(image)
5. opencv 和 QImage
# opencv 转 Qt.QImage
def mat2qimage(image: np.ndarry) -> QImage:
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    y, x = image.shape[:2]
    return QImage(image.data, x, y, x * 3, QImage.Format_RGB888)
# Qt.QImage 转 opencv
# 此处转换完成的图片是4通道(RGBA)还需转换成3通道(RGB)
# image = cv2.cvtColor(image, cv2.COLOR_RGBA2RGB)
def qimage2mat(image: QImage) -> np.ndarry:
    image = image.convertToFormat(4)
    width = image.width()
    height = image.height()
    ptr = image.bits()
    ptr.setsize(image.byteCount())
    return np.array(ptr).reshape(height, width, 4)
6. opencv 和 matplotlib
# opencv 在 matplotlib 下的显示与保存
import matplotlib.pyplot as plt
import cv2

image = cv2.imread("./a.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # BGR 转 RGB

# 先保存,再显示,否则会无法保存以及正常显示的问题。
plt.imshow(image)
plt.savefig('./b.jpg')  # 保存
plt.show()  # 显示
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GAN(生成对抗网络)是一种机器学习模型,可以通过生成器和判别器相互对抗的方式来生成逼真的样本。在Python中,可以使用TensorFlow、Keras或PyTorch等库来构建GAN模型。 要基于GAN给图像加雾,首先需要准备两个网络模型:生成器和判别器。生成器负责生成具有逼真雾化效果的图像,判别器负责判断生成的图像是否真实。两个网络通过对抗训练的方式来相互提升。 在训练过程中,首先加载训练集中的清晰图像,并对其进行预处理。然后生成器接收一个随机噪声向量作为输入,并将其转换为一张雾化图像。判别器则接收两张图像作为输入:清晰图像和生成器生成的雾化图像,并预测哪张图像是真实的。 生成器生成的雾化图像与真实清晰图像一起输入判别器,判别器将生成的雾化图像与真实清晰图像进行比较,并根据差异性训练自身。同时,生成器也会根据判别器的反馈进行更新,以生成更逼真的雾化图像。这个过程交替进行,直到生成器和判别器的性能都达到理想水平。 一旦训练完成,我们可以使用生成器来给任意一张清晰图像添加雾化效果。只需将清晰图像输入生成器中,它将会输出一张具有逼真雾化效果的图像。 需要注意的是,GAN训练过程可能会比较耗时,需要足够的计算资源和时间。同时,模型的性能也受到数据集的质量和规模的影响。因此,在使用基于GAN的图像加雾技术时,需要选择适合的训练集和网络参数,以获得更好的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值