为什么在Python中为图像中的像素赋值时会产生垃圾

为什么在Python中为图像中的像素赋值时会产生垃圾,python,image,filter,Python,Image,Filter,我在图像上实现平均过滤器,但当我为像素赋值时,它会产生大量垃圾 这是我的密码 def AvergaeFilter(): ImageToWork = cv2.imread('D:\Y3T2\Brain Tumor\BrainTumourGray.jpg') w = ImageToWork.shape[0] h = ImageToWork.shape[1] for i in range(2,700): for j in range(2,700):

我在图像上实现平均过滤器,但当我为像素赋值时,它会产生大量垃圾 这是我的密码

def AvergaeFilter():
    ImageToWork = cv2.imread('D:\Y3T2\Brain Tumor\BrainTumourGray.jpg')
    w = ImageToWork.shape[0]
    h = ImageToWork.shape[1]
    for i in range(2,700):
        for j in range(2,700):
            Total = ((ImageToWork[i][j])+(ImageToWork[i][j+1])+(ImageToWork[i+1][j-1])+(ImageToWork[i+1][j])+((ImageToWork[i+1][j+1])+(ImageToWork[i][j-1])+(ImageToWork[i-1][j+1])+(ImageToWork[i-1][j-1])+(ImageToWork[i-1][j])))/9
            ImageToWork[i][j] = Total
    cv2.imwrite('D:\Y3T2\Brain Tumor\BrainGrayTest.jpg', ImageToWork)
当我打印(Total)时,它会给出一个值,但当我为一个图像运行代码时,它会给出这样一个垃圾


更新的代码[正在工作]

def AverageFilter():
ImageToWork = cv2.imread('D:\Y3T2\Brain Tumor\BrainGrayNoise.jpg', cv2.IMREAD_GRAYSCALE)
ImageToOut = ImageToWork.copy()
height = ImageToWork.shape[0]
width = ImageToWork.shape[1]
for i in np.arange(3, height-3):
    for j in np.arange(3, width-3):    
        Temp = 0  
        for k in np.arange(-3, 4):
            for l in np.arange(-3, 4):
                Value = (ImageToWork.item(i+k, j+l))
                Temp = Temp + Value
            Temp = Temp//9
        ImageToOut.itemset((i,j), Temp)
        #Temp = 0

cv2.imwrite('D:\Y3T2\Brain Tumor\BrainGrayAverageFilter.jpg', ImageToOut)

您可以替换

一个问题是,您正在尝试就地更改图像,因此更新一个像素会影响下一个像素的计算。您应该将结果存储到一个新数组中,这样在创建整个新图像之前,您永远不会查看任何新像素值。当我测试将值分配给新图像时,它也会产生相同的垃圾:/Yeah,这可能不是唯一的问题,但肯定是个问题。好的,这里有一个问题:
ImageToWork
中的值是整数吗?您正在使用Python3吗?如果是这样,那么除以9的结果就是一个浮点,这可能会改变解释(我真的不知道)。如果要将结果强制为整数,请在除法时使用
/
而不是
/
。OMG我很抱歉发布了错误的图像,但现在我更新了它,请查看。我尝试了你的操作符//并且输出是一样的,但是在我更新照片后,请看一看。我很抱歉,是的,我正在使用python 3