如何使用该区域的中位数来修复图片的区域?

时间:2016-03-16 05:14:05

标签: python opencv image-processing

This是我正在使用的图片。我想选择一个区域(中间的明亮圆圈),然后用该圆圈的像素中位数绘制它。我以前怎么样了?

1 个答案:

答案 0 :(得分:0)

使用scipy.misc.imread(),您可以轻松处理图片的数组。请记住,彩色图片的每个像素都包含三个值,每个RGB通道一个。对于标量像素,我通过flatten=True将图片缩小为灰度。当然,您可以将我的答案扩展到所有频道的单独中位数。

import numpy as np
from scipy import misc
pic = misc.imread("ri1.jpg", flatten=True)
x, y = np.meshgrid(np.arange(pic.shape[1]), np.arange(pic.shape[0]))
circle_x, circle_y, circle_radius = 200, 400, 100
args = np.argwhere( np.sqrt((x-circle_x)**2+(y-circle_y)**2)<circle_radius )
#pic[args] = np.median(pic[args])   # doesn't work?!?
pic[args[:,0], args[:,1]] = np.median(pic[args[:,0], args[:,1]])
misc.imsave("ri1_new.jpg", pic)