簡體   English   中英

RGB 值作為 python 中的元組

[英]RGB values as tuple in python

我是編程新手,練習有問題。 我有一個重現圖像的 rgb 值列表。 我需要一個 output 具有以下值的字符串:X、Y、W、H、R、G、B 其中 X 和 Y 是坐標,W 和 H 是矩形的寬度和高度,R GB 是 colors。

例如:

image=[[(255, 0, 0), (255, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)],
[(255, 0, 0), (255, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)],
[(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)],
[(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)],
[(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 255, 0), (0, 255, 0)],
[(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 255, 0), (0, 255, 0)]]

我需要這個 output:

0,0,2,2,255,0,0
4,4,2,2,0,255,0

我正在嘗試使用坐標,但我被卡住了。

xy=[]
for row in image:
    for x in row:
        if x != (0,0,0):
            xy.append(row.index(x))

output:

xy=[0, 0, 0, 0, 4, 4, 4, 4]

任何幫助深表感謝!

有和沒有枚舉的例子。

# Some scratch code
image = [
    [(255, 0, 0), (255, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)],
    [(255, 0, 0), (255, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)],
    [(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)],
    [(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)],
    [(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 255, 0), (0, 255, 0)],
    [(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 255, 0), (0, 255, 0)]]
image_width = len(image[0])
image_height = len(image)
print(f'{image_height=} {image_width=}')

print(' xy without enumerate'.center(40, '*'))
xy = ''
for row in range(image_height):
    for column in range(image_width):
        result = (f'{column},{row},{image_width},{image_height},'
                  f'{image[row][column][0]},'
                  f'{image[row][column][0]},'
                  f'{image[row][column][0]}')
        xy = xy + result + '\n'
print(xy)

print(' xy with enumerate'.center(40, '*'))
xy = ''
""
for row, _ in enumerate(image):
    for column, _ in enumerate(image[0]):
        result = (f'{column},{row},{image_width},{image_height},'
                  f'{image[row][column][0]},'
                  f'{image[row][column][0]},'
                  f'{image[row][column][0]}')
        xy = xy + result + '\n'
print(xy)

你為什么不使用二維圖像? 使用此表示,您可能會丟失空間信息(垂直信息)。

另外,你沒有解釋你想如何檢測你的矩形,它們可以有任何顏色嗎? 那么它會更難,我建議使用圖像(numpy,pillow,opencv 或類似的)

如果你仍然想這樣做,我們可以假設矩形有 3 colors (R, G or B)

# define colors
R = (255, 0, 0)
G = (0, 255, 0)
B = (0, 0, 255)

# detect them
rs = []
gs = []
bs = []
# loop for each row
for j, row in enumerate(image):
    # and for each value
    for k, val in enumerate(row):
        if val == R:
            rs.append((j,k))
        if val == G:
            gs.append((j,k))
        if val == B:
            bs.append((j,k))
print(rs, gs, bs)

# now you can extract the values
if len(rs) > 0:
    # the coordinates are the first value
    R_x, R_y = rs[0]
    # width is last minus first (+1)
    R_w = (rs[-1][0] - rs[0][0]) + 1
    # height the same
    R_h = (rs[-1][1] - rs[0][1]) + 1
    print(R_x, R_y, R_w, R_h, R)

if len(gs) > 0:
    G_x, G_y = gs[0]
    G_w = (gs[-1][0] - gs[0][0]) + 1
    G_h = (gs[-1][1] - gs[0][1]) + 1
print(G_x, G_y, G_w, G_h, G)

output 是0 0 2 2 (255, 0, 0)你可能需要在元組中調整它,但這應該很容易。

您可以對 rs、gs 和 bs 執行此操作(即使沒有藍色矩形),gs 的 output 是4 4 2 2 (255, 0, 0) ,這是您想要的。

這是你的問題嗎?

注意:如前所述,如果矩形可以是任何顏色,這將不起作用,也許可以遵循一些教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM