User:Eleanorg/1.2/Forbidden Pixels/storing RGB values in nested lists

From XPUB & Lens-Based wiki

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)