Python pixel color change

I suppose to get an image from my flash robot and determine the color of each pixel in my image. Then, if the pixel is mostly red, change it to completely green. If the pixel is mostly green, change it to completely blue. If the pixel is mostly blue, change it to completely red. This is what I can do, but I cannot get it to work in order to get the image I need to change. There is no syntax error, it's just the semantics that I came across. I am using python.

My code is:

import getpixel getpixel.enable(im) r, g, b = im.getpixel(0,0) print 'Red: %s, Green:%s, Blue:%s' % (r,g,b) 

I also have an image saved as the following:

 pic1 = makePicture("pic1.jpg"): for pixel in getpixel("pic1.jpg"): if pixel Red: %s: return Green:%s if pixel Green:%s: return Blue:%s 
+8
source share
5 answers

I assume that you are trying to use the Image module. Here is an example:

 from PIL import Image picture = Image.open("/path/to/my/picture.jpg") r,g,b = picture.getpixel( (0,0) ) print("Red: {0}, Green: {1}, Blue: {2}".format(r,g,b)) 

By running this on this image , I get the output:

 >>> from PIL import Image >>> picture = Image.open("/home/gizmo/Downloads/image_launch_a5.jpg") >>> r,g,b = picture.getpixel( (0,0) ) >>> print("Red: {0}, Green: {1}, Blue: {2}".format(r,g,b)) Red: 138, Green: 161, Blue: 175 

EDIT: To do what you want, I would try something like this

 from PIL import Image picture = Image.open("/path/to/my/picture.jpg") # Get the size of the image width, height = picture.size() # Process every pixel for x in width: for y in height: current_color = picture.getpixel( (x,y) ) #################################################################### # Do your logic here and create a new (R,G,B) tuple called new_color #################################################################### picture.putpixel( (x,y), new_color) 
+15
source

You have errors:

 # Get the size of the image width, height = picture.size() for x in range(0, width - 1): for y in range(0, height - 1): 
  • Brackets - a mistake! lower them.
  • int is not iterable.

I also recommend that you use load () because it is much faster:

 pix = im.load() print pix[x, y] pix[x, y] = value 
+3
source
 import cv2 import numpy as np m = cv2.imread("C:/../Sample Pictures/yourImage.jpg") h,w,bpp = np.shape(m) for py in range(0,h): for px in range(0,w): #can change the below logic of rgb according to requirements. In this #white background is changed to #e8e8e8 corresponding to 232,232,232 #intensity, red color of the image is retained. if(m[py][px][0] >200): m[py][px][0]=232 m[py][px][1]=232 m[py][px][2]=232 cv2.imshow('matrix', m) cv2.waitKey(0) cv2.imwrite('yourNewImage.jpg',m) 
+2
source

I am using python 3.6.4 and Pillow 5.0.0. Gizmo code snippet didn't work for me. After a little work, I created a fixed snippet:

 import Image picture = Image.open("/path/to/my/picture.jpg") # Get the size of the image width, height = picture.size # Process every pixel for x in range(width): for y in range(height): current_color = picture.getpixel( (x,y) ) #################################################################### # Do your logic here and create a new (R,G,B) tuple called new_color #################################################################### picture.putpixel( (x,y), new_color) 
+1
source

Adding some comments on Gizmo's answer. It:

 px = im.load() current_color = (px[i, j]) 

probably faster than this:

 picture.getpixel( (x,y) ) 

Also, be sure to use this:

  picture.putdata(colors) 

instead, inside the loop:

 picture.putpixel( (x,y), new_color) 
0
source

All Articles