因此,对于我正在进行的一些ml工作,我需要能够生成随机图像并将它们添加到现有图像中。为了测试,我生成这些随机图像并将它们乘以零,然后将它们添加到我现有的图像中。我希望收到一张与原始图像相同的新图像,但我会收到原始图像的蓝色版本:
我几个小时以来一直在反对这个问题,似乎无法得出导致这种差异的原因。以下是相关代码:
# unit_img is an ndarray with random entries, then normalized
# so that the sum of the squares of all the elements is 1
# min_dist is our scalar we multiply our unit image by, since
# it's zero we don't care about the unit image
min_dist = 0
...
unit_img = np.load(path_to_unit_img)
unit_img = min_dist * unit_img
# check if our unit img and our original image are the same size
if unit_img.size != checked_img.size:
continue
# "move" our new image to the solution space of the original img
addition = unit_img + checked_img
result_img = Image.fromarray(addition.astype('uint8')).convert('RGB')
# now we save our generated image
result_img.save(save_path + extension + img[:-4] + "_" + str(x) + ".jpg")
对于完全公开,我正在迭代几千张图像,并且unit_img对于每个图像是不同的。运行一个简单的测试程序,加载上面显示的猫图像并打印出来,我看到:
# original image
[[[164 159 160]
[164 159 160]
[164 159 160]
...
[152 152 152]
[152 152 152]
[152 152 152]]
[[165 160 161]
[165 160 161]
[165 160 161]
...
[152 152 152]
[152 152 152]
[152 152 152]]
[[162 160 160]
[162 160 160]
[162 160 160]
...
[152 152 152]
[152 152 152]
[152 152 152]]
...
[[151 143 136]
[151 143 136]
[151 143 136]
...
[ 81 81 81]
[ 83 83 83]
[ 85 85 85]]
[[152 144 137]
[152 144 137]
[152 144 137]
...
[ 86 86 86]
[ 83 83 83]
[ 82 82 82]]
[[152 144 137]
[152 144 137]
[152 144 137]
...
[ 89 89 89]
[ 82 82 82]
[ 78 78 78]]]
===========================================
# Resultant from adding an array of zeros
[[[160 159 163]
[160 159 163]
[160 159 163]
...
[152 152 152]
[152 152 152]
[152 152 152]]
[[161 160 164]
[161 160 164]
[161 160 164]
...
[152 152 152]
[152 152 152]
[152 152 152]]
[[160 159 161]
[160 159 161]
[160 159 161]
...
[152 152 152]
[152 152 152]
[152 152 152]]
...
[[137 143 150]
[137 143 150]
[137 143 150]
...
[ 80 80 80]
[ 83 83 83]
[ 87 87 87]]
[[138 144 151]
[138 144 151]
[138 144 151]
...
[ 86 86 86]
[ 83 83 83]
[ 82 82 82]]
[[138 144 151]
[138 144 151]
[138 144 151]
...
[ 89 89 89]
[ 82 82 82]
[ 77 77 77]]]
很明显,图像在数值上是相似的,但沿途有些轴被反转。我到目前为止尝试的是检查我的unit_img帖子
unit_img = min_dist * unit_img
通过执行np.count_nonzero 实际上是零,并且它总是有0个非零元素,这意味着我真的在添加一个充满零的ndarray。这意味着我以某种方式错误地保存图像,或者可能是错误的数据类型。任何帮助都将不胜感激!
答案 0 :(得分:0)
你是如何打开图像的?难道它不是以RGB格式开始的,你的转换是否正在搞乱它?如果您使用的是openCV,则图像为may start out in BGR format
另外,你说if unit_img.size != checked_img.size:
是检查图像大小是否相等,但这实际上会检查它们是否相等。无论哪种方式,代码的其余部分将运行,因为它是未缩进的,因此它不是逻辑的一部分
答案 1 :(得分:0)
我只需要添加:
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
在任何时候我使用cv2.imread()加载图像。这是因为imread将文件读取为BGR而不是RGB,因此轴将被反转。谢谢你的帮助!