You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用tf.image.resize调整图片后用cv2.imwrite保存报错求助

问题解决:TensorFlow resize后用OpenCV保存图片报错

报错根本原因

tf.image.resize返回的是TensorFlow的Tensor对象,而OpenCV的cv2.imwrite仅接受numpy数组或OpenCV原生的UMat类型,类型不匹配导致报错。同时原代码还存在两个潜在问题:

  • 输出图片无文件后缀,OpenCV无法识别保存格式
  • Tensor输出为float32类型,不符合图片保存的uint8(0-255整数)要求

解决方案及修改后代码

直接对Tensor做类型转换,并补充文件后缀,代码如下:

j=0
for i in images:
    skyr_img = imread(my_data_dir+'/'+str(i))
    skyr_img = tf.image.resize(skyr_img, [171,256], antialias=True, method='bilinear')
    # 1. 将Tensor转换为numpy数组,同时转为图片要求的uint8类型
    skyr_img_np = skyr_img.numpy().astype('uint8')
    # 可选:如果不需要透明通道(4通道转3通道),取消下面注释
    # skyr_img_np = skyr_img_np[..., :3]
    print(skyr_img_np.shape, j)
    # 2. 添加文件后缀,4通道图片用.png(JPG不支持透明通道)
    cv2.imwrite(my_data_dir+'/train/img'+str(j)+'.png', skyr_img_np)
    j += 1

关键改动说明

  • .numpy()转换:将TensorFlow的Tensor对象转为numpy数组,满足OpenCV的输入要求
  • astype('uint8'):把resize后生成的float32浮点值转为0-255的整数像素值,避免保存后出现黑图或格式错误
  • 添加文件后缀:明确保存格式,4通道RGBA图片必须用.png,3通道图片可以用.jpg或.png
  • 可选通道处理:如果原图是RGBA但不需要透明通道,通过[..., :3]截取前3个RGB通道,即可保存为JPG格式

内容的提问来源于stack exchange,提问作者Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:40:23