我想将图像中任何地方的20 x 20像素正方形的颜色更改为纯红色。图像数据只是一个数组。对于我来说,将正方形更改为红色,我将需要在感兴趣的正方形中将红色层设置为最大值,将绿色和蓝色层设置为零。不确定如何执行此操作。
import numpy as np
import matplotlib.pyplot as plt
imageArray = plt.imread('earth.jpg')
print('type of imageArray is ', type(imArray))
print('shape of imageArray is ', imArray.shape)
fig = plt.figure()
plt.imshow(imageArray)
答案 0 :(得分:2)
要在图像上绘制正方形,可以使用matplotlib中的Rectangle
。
请参见matplotlib: how to draw a rectangle on image
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
imageArray = plt.imread('earth.jpg')
print('type of imageArray is ', type(imageArray))
print('shape of imageArray is ', imageArray.shape)
fig, ax = plt.subplots(1)
plt.imshow(imageArray)
square = patches.Rectangle((100,100), 20,20, color='RED')
ax.add_patch(square)
plt.show()
如果您实际上要更改每个像素,则可以遍历行/列,并将每个像素设置为[255,0,0]。这是一个示例(如果朝这个方向发展,您将要包括IndexError的异常处理):
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
def drawRedSquare(image, location, size):
x,y = location
w,h = size
for row in range(h):
for col in range(w):
image[row+y][col+x] = [255, 0, 0]
return image
imageArray = np.array(plt.imread('earth.jpg'), dtype=np.uint8)
print('type of imageArray is ', type(imageArray))
print('shape of imageArray is ', imageArray.shape)
imArray = drawRedSquare(imageArray, (100,100), (20,20))
fig = plt.figure()
plt.imshow(imageArray)
编辑:
一种更有效的更改像素值的方法是使用数组切片。
def drawRedSquare(image, location, size):
x,y = location
w,h = size
image[y:y+h,x:x+w] = np.ones((w,h,3)) * [255,0,0]
return image
答案 1 :(得分:1)
import numpy as np
import matplotlib.pyplot as plt
imageArray = plt.imread('earth.jpg')
# Don't use loops. Just use image slicing since imageArray is a Numpy array.
# (i, j) is the row and col index of the top left corner of square.
imageArray[i:i + 20, j:j + 20] = (255, 0, 0)
答案 2 :(得分:0)
您可以通过以下方式进行:
from PIL import Image
picture = Image.open(your_image)
pixels = picture.load()
for i in range(10,30): # your range and position
for j in range(10,30):
pixels[i,j] = (255, 0, 0)
picture.show()