Python与Numpy图像融合报错:TypeError: Cannot handle this data type
问题解决:图片数组处理报错 TypeError: Cannot handle this data type
报错原因
你遇到的错误是因为Image.fromarray不支持int64(<i8)类型的数组。PIL库处理图片时,要求像素数据是uint8类型(范围0-255的无符号整数),而你用astype(int)得到的是int64类型,超出了PIL的支持范围。
修正后的代码
import numpy as np from PIL import Image # 注意:这里要写完整的文件名,比如"img1.jpg"、"img2.png" image1 = Image.open("img1") image2 = Image.open("img2") # 转成数组后直接计算 array1 = np.asarray(image1) array2 = np.asarray(image2) # 相加后除以2,最后转成uint8类型 output = (array1 + array2) / 2 final_product = output.astype(np.uint8) # 生成并保存图片 Image.fromarray(final_product).save("my_img_numpy.png")
关键修改点
- 把
astype(int)改成astype(np.uint8),将数组转为PIL支持的图片像素类型 - 简化了计算步骤,直接用
(array1 + array2)/2替代分步的np.add和np.divide,代码更简洁 - 注意图片路径要写完整,比如如果是JPG格式,要写成
"img1.jpg",否则PIL可能找不到文件
额外提示
如果两张图片的尺寸(宽、高、通道数)不一样,相加会直接报错,所以要确保两张图是同尺寸、同格式的图片。
内容的提问来源于stack exchange,提问作者William Hickey
相关产品推荐
相关产品推荐

