我从图像(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?
感谢您的每一个评论和回答,感谢您花时间阅读。
1条答案
按热度按时间jckbn6z71#
试试这个:
字符串