Изменение цвета пикселей Python
Я должен получить изображение от моего робота fluke и определить цвет каждого пикселя в моем изображении. Затем, если пиксель в основном красный, измените его на полностью зеленый. Если пиксель в основном зеленый, измените его на полностью синий. Если пиксель в основном синий, измените его на полностью красный. Это то, что я могу сделать, но я не могу заставить его работать, чтобы получить образ, который я должен изменить. Синтаксической ошибки нет, это просто семантика, с которой у меня проблемы. Я использую python.
мой попытка кода:
import getpixel
getpixel.enable(im)
r, g, b = im.getpixel(0,0)
print 'Red: %s, Green:%s, Blue:%s' % (r,g,b)
также у меня есть изображение, сохраненное следующим образом:
pic1 = makePicture("pic1.jpg"):
for pixel in getpixel("pic1.jpg"):
if pixel Red: %s:
return Green:%s
if pixel Green:%s:
return Blue:%s
5 ответов
Я предполагаю, что вы пытаетесь использовать Image
модуль. Вот пример:
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))
на этот изображения Я получаю вывод:
>>> 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
изменить: Чтобы сделать то, что вы хотите, я бы попробовал что-то вроде этого
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)
у вас есть ошибки:
# Get the size of the image
width, height = picture.size()
for x in range(0, width - 1):
for y in range(0, height - 1):
- скобках ошибка!! опустите их.
- int не повторяемое.
Я также рекомендую вам использовать load (), потому что это намного быстрее :
pix = im.load()
print pix[x, y]
pix[x, y] = value
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)
добавление некоторых замечаний к ответу Gizmo. Это:
px = im.load()
current_color = (px[i, j])
вероятно, быстрее, чем этот:
picture.getpixel( (x,y) )
кроме того, обязательно используйте это:
picture.putdata(colors)
вместо этого внутри цикла:
picture.putpixel( (x,y), new_color)
Я использую python 3.6.4 и подушку 5.0.0. Фрагмент кода подарка не сработал для меня. После небольшой работы я создал фиксированный фрагмент:
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)