Changing pixel color Python

匿名 (未验证) 提交于 2019-12-03 02:52:02

问题:

I am suppose to get an image from my fluke 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 am able to do, but I can't get it to work to get the image I have to change. There is no syntax error, it is just semantic I am having trouble with. I am using python.

My attempted code:

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

Also I have the picture saved like 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 

回答1:

I assume you're trying to use the Image module. Here's an example:

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)) 

Running this on this image I get the output:

>>> 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

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) 


回答2:

You have mistakes:

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

I also recommend you to use load(), because it's much faster :

pix = im.load()  print pix[x, y]  pix[x, y] = value 


回答3:

Adding some remarks on Gizmo's answer. This:

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

is probably faster than this:

picture.getpixel( (x,y) ) 

Also, make sure to use this:

 picture.putdata(colors) 

instead of this inside the loop:

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


回答4:

I'm using python 3.6.4 and Pillow 5.0.0. Gizmo's code snippet didn't work for me. After 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) 


回答5:

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) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!