【发布时间】:2021-08-17 07:39:37
【问题描述】:
在这个程序中,我想改变背景颜色。在将其转换为 numpy 数组后,我通过 Pillow 读取图像。提供一个坐标,算法应该从上、下、左、右检查邻居是否具有相同的颜色,如果其中一个邻居遵守条件,那么他的坐标将被放入队列中。程序没有返回错误,但是abs()函数返回了错误的结果。
from PIL import Image
import numpy as np
import time
start_time=time.time()
im=Image.open("Capturecasa.png")
data=np.asarray(im,dtype=np.uint8)
back=np.zeros(4,dtype=np.uint8)
back=data[200][1000].copy()
q=[[200,1000]]
u=10
m=[5,5,5,255]
print(back,"!!!!!")
while q:
i=q[0][0]
j=q[0][1]
k=0
if abs(data[i+1,j,0]-back[0])<u and abs(data[i+1,j,1]-back[1])<u and abs(data[i+1,j,2]-back[2])<u:
data[i+1,j]=m
k+1
q.append([i+1,j])
else:
print(back,"!!!!!")
print(data[i+1,j],abs(data[i+1,j,0]-back[0]),abs(data[i+1,j,1]-back[1]),abs(data[i+1,j,2]-back[2]))
if abs(data[i-1,j,0]-back[0])<u and abs(data[i-1,j,1]-back[1])<u and abs(data[i-1,j,2]-back[2])<u:
k+1
data[i-1,j]=m
q.append([i-1,j])
else:
print(back,"!!!!!")
print(data[i-1,j],abs(data[i-1,j,0]-back[0]),abs(data[i-1,j,1]-back[1]),abs(data[i-1,j,2]-back[2]))
if abs(data[i,j+1,0]-back[0])<u and abs(data[i,j+1,1]-back[1])<u and abs(data[i,j+1,2]-back[2])<u:
k+1
data[i,j+1]=m
q.append([i,j+1])
else:
print(back,"!!!!!")
print(data[i,j+1],abs(data[i,j+1,0]-back[0]),abs(data[i,j+1,1]-back[1]),abs(data[i,j+1,2]-back[2]))
if abs(data[i,j-1,0]-back[0])<u and abs(data[i,j-1,1]-back[1])<u and abs(data[i,j-1,2]-back[2])<u:
k+1
data[i,j-1]=m
q.append([i,j-1])
else:
print(back,"!!!!!")
print(data[i,j-1],abs(data[i,j-1,0]-back[0]),abs(data[i,j-1,1]-back[1]),abs(data[i,j-1,2]-back[2]))
del q[0]
if k==4:
print("yes")
#print(i,j,data[i+1,j],data[i-1,j],data[i,j+1],data[i,j-1])
im=Image.fromarray(data,'RGBA')
im.show()
print("--- %s seconds ---"%(time.time()-start_time))
我检查了我的 abs() 显示的内容,该函数返回错误的数字。
[204 208 211 255] !!!!!
[163 167 170 255] 215 215 215
[204 208 211 255] !!!!!
[ 5 5 5 255] 57 53 50
【问题讨论】:
标签: python numpy python-imaging-library