2012-10-31 14 views
7

Ich nehme an, ein Bild von meinem Zufallsroboter zu bekommen und die Farbe jedes Pixels in meinem Bild zu bestimmen. Wenn das Pixel dann hauptsächlich rot ist, ändern Sie es auf vollständig grün. Wenn das Pixel größtenteils grün ist, ändern Sie es vollständig in Blau. Wenn das Pixel hauptsächlich blau ist, ändern Sie es vollständig in rot. Dies ist, was ich tun kann, aber ich kann es nicht zur Arbeit bringen, um das Bild zu bekommen, das ich ändern muss. Es gibt keinen Syntaxfehler, es ist nur semantisch, mit dem ich Probleme habe. Ich benutze Python.Ändern der Pixelfarbe Python

Mein versucht Code:

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

Auch habe ich das Bild wie folgt gespeichert:

pic1 = makePicture("pic1.jpg"): 
    for pixel in getpixel("pic1.jpg"): 
     if pixel Red: %s: 
      return Green:%s 
     if pixel Green:%s: 
      return Blue:%s 
+0

(http://whathaveyoutried.com) Wo benötigen Sie Hilfe? – thegrinner

+0

Ich habe meinen obigen Beitrag bearbeitet –

Antwort

11

Ich nehme an, Sie versuchen, das Image Modul zu verwenden. Hier ein Beispiel:

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

des Lauf auf diesen image ich die Ausgabe erhalten:

>>> 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: zu tun, was Sie wollen, ich würde so etwas wie diese

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

Vielen Dank! Also, wenn ich die Pixelfarbe in eine bestimmte Farbe ändern musste (in meiner Frage erwähnt), muss ich Ihren Code verwenden, aber eine for-Schleife einfügen und dann "wenn" eine Farbe ist, werde ich es auf die gewünschte Farbe zurückgeben ? –

+0

Aktualisiert, um Ihre spezifische Verwendung ein wenig klarer zu behandeln. Sie können 'R, G, B = current_color' verwenden, um die einzelnen Farben zu trennen und' new_color = (R, G, B) 'zu verwenden, um wieder zurück zu konvertieren. – Gizmo

+0

Vielen Dank Gizmo !!! –

3

Sie versucht, habe Fehler:

# 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. Klammern sind Fehler !! lassen Sie sie weg.
  2. int ist nicht iterierbar.

Ich empfehle Ihnen auch load() zu verwenden, da es viel schneller ist:

pix = im.load() 

print pix[x, y] 

pix[x, y] = value 
0

einige Bemerkungen über Gizmo Antwort Hinzufügen. Dies:

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

ist wahrscheinlich schneller als dies:

picture.getpixel((x,y)) 

Stellen Sie außerdem sicher, dass dies nutzen:

picture.putdata(colors) 

statt dessen in der Schleife:

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

Ich benutze Python 3.6.4 und Pillow 5.0.0. Gizmos Code-Schnipsel funktionierte nicht für mich. Nach wenig Arbeit habe ich einen festen Schnipsel: [? Was haben Sie versucht]

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) 
0
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) 
Verwandte Themen