如何在numpy中查找特定的一行(RGB)值,以便用一组不同的(RGB)值替换该行?

4nkexdtk  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(84)

我从图像(RGB值)创建了一个numpy数组,需要配置其中的值。设置一个单值条件(只搜索列)来搜索给定的值,然后应用所需的配置,将配置应用于整行,如果只关注列,这将是很好的。
我需要指定何时将配置应用于行,为此,我需要设置条件,以便实际考虑给定行的每个值,而不是仅搜索列的值,而不是基于整个数组的列的单个值进行搜索。
将所有RGB值转换为Hex,然后根据需要配置值(因为它们是1D的),然后将所有Hex值转换为RGB,然后打印结果,如果绝对必要,将是一个选项。
从这里开始介绍我使用的代码和我得到的结果。
使用的代码,以便从图像创建一个数组(在这种情况下的尺寸:1366 x 768 & .PNG & RGB),结果为:

from PIL import Image
import numpy as np

path = "path_img_file.png"
oArray = np.array(Image.open(path).convert('RGB'))
print(oArray)

#result:
..
..
[[223 223 213]
  [223 223 213]
  [222 222 212] #RELEVANT ROW LATER
  ...
  [224 222 212]
  [222 221 211] #RELEVANT ROW LATER
  [225 223 213]]]

字符串
每行的第一列为oArray[oArray[:, :, 0] == 222] = [1, 2, 3](按照[:, :, 0]),只要存在值222 .. == 222],则存在222的整行将等于[ 1 2 3],实现该目标的代码及其结果为:

from PIL import Image
import numpy as np

path = "path_img_file.png"
oArray = np.array(Image.open(path).convert('RGB'))
oArray[oArray[:, :, 0] == 222] = [1, 2, 3] #THIS IS THE CODE
print(oArray)

#result:
..
..
 [[223 223 213]
  [223 223 213]
  [  1   2   3] #AFFECTED ROW
  ...
  [224 222 212]
  [  1   2   3] #AFFECTED ROW
  [225 223 213]]]


我的意图是只影响后面的行,即最初为[222 221 211]的行,以便[222 222 212]保持最初的状态。我以为使用沿着oArray[oArray[:, :] == [222, 222, 211]] = [1, 2, 3]的东西会有效,但我似乎无法有效地应用它,如果使用代码,其结果将如下所示:

from PIL import Image
import numpy as np

path = "path_img_file.png"
oArray = np.array(Image.open(path).convert('RGB'))
oArray[oArray[:, :] == [222, 222, 211]] = [1, 2, 3] #NOTICE oArray[:, :, 0] IS oArray[:, :] HERE
print(oArray)

#result:
oArray[oArray[:, :] == [222, 222, 211]] = [1, 2, 3]
ValueError: NumPy boolean array indexing assignment cannot assign 3 input values to the 14743 output values where the mask is true


我如何确保只要行是[222 221 211],就打印[1, 2, 3]?如果绝对必要(介绍),我如何将RGB值转换为十六进制,并将十六进制值转换为RGB?
感谢您的每一个评论和回答,感谢您花时间阅读。

jckbn6z7

jckbn6z71#

试试这个:

mask = np.all(oArray == [222, 221, 211], axis=2)
oArray[mask] = [1, 2, 3]

字符串

相关问题