User:Eleanorg/1.2/Forbidden Pixels/storing RGB values in nested lists
A better method of associating the co-ordinate & colour of each pixel, as suggested by Timo.
Stores rgb values and pixel co-ordinates in nested lists, thus:
pixels[ [row1column1, row1column2, row1column3....] [row2column1, row2column2, row2column3...] [row3column1...] ]
^^ each sub-list corresponds to a row in the image grid ^^
#!/usr/bin/python
#-*- coding:utf-8 -*-
import os, re
# stores rgb values and pixel co-ordinates in nested lists, thus:
# pixels[ [row1column1, row1column2, row1column3....] [row2column1, row2column2, row2column3...] [row3column1...] ]
#--------- determine image dimensions----------------------------------------#
image = "20by10PixelsSection1.png"
sizeQuery = "identify -format '%w %h' " + image # system command gets image dimensions with ImageMagick
size = os.popen(sizeQuery, 'r').read() # captures output of system call
(width, height) = size.split() # splits ImageMagick output into separate column & row no's
columns = int(width)
rows = int(height)
print columns
print
print rows
#--------- create hash with each pixel's position & colour ------------------#
pixels = [] # create empty list 'pixels'
def getcolors ():
for row in range (0, rows): # for each row in the image...
pixels.append([]) # ...append a new sub-list within list 'pixels'
for column in range (0, columns): # for each column in the row...
colorQuery = "convert " + image + " -format '%[pixel:p{" + str(column) + "," + str(row) + "}]' info:-"
colorResult = os.popen(colorQuery, 'r').read() # makes & captures output of system call
color = re.sub("\n", "", colorResult) # strips newline character from end of sys call result
pixels[row].append(color) # append color as a value to the 'row' sublist within 'pixels' - its key will be the same as the current column number
getcolors()
# test that colours & coordinates are assigned correctly by printing entire list:
for key, value in sorted(pixels.keys()):
print(key, value)