查找RGB颜色通道中的变化-Python

查找RGB颜色通道中的变化-Python,python,opencv,image-processing,computer-vision,Python,Opencv,Image Processing,Computer Vision,我的程序接收一幅图像并将其分割成一个网格(由较小的图像组成),然后在网格的每个窗口计算出平均RGB值 我试图计算一个窗口的平均值(平均RGB)与序列中前一个窗口之间的差异,以找出相邻窗口((x+1)-x)之间的颜色变化,但我不确定如何实现这一点 这是我的密码: #import packages import numpy as np import cv2 #Read in image img = cv2.imread('images/0021.jpg') #print img.shape sca

我的程序接收一幅图像并将其分割成一个网格(由较小的图像组成),然后在网格的每个窗口计算出平均RGB值

我试图计算一个窗口的
平均值
(平均RGB)与序列中前一个窗口之间的差异,以找出相邻窗口((x+1)-x)之间的颜色变化,但我不确定如何实现这一点

这是我的密码:

#import packages
import numpy as np
import cv2

#Read in image
img = cv2.imread('images/0021.jpg')
#print img.shape
scale = 9

#Get x and y components of image
y_len,x_len,_ = img.shape
#cv2.imshow('Original',img)
#cv2.waitKey(5000)

mean_values = []
for y in range(scale):
    for x in range(scale):
        #Crop image scale*scale windows
        cropped_img=img[(y*y_len)/scale:((y+1)*y_len)/scale,(x*x_len)/scale:((x+1)*x_len)/scale]

        mean_val=cv2.mean(cropped_img)
        mean_val=mean_val[:3]

        #set pixel values of each window to the meanBGR
        cropped_img[:,:,:] = mean_val

        #Print mean_values array
        mean_values.append([mean_val])
mean_values=np.asarray(mean_values)
print mean_values.reshape(3,scale,scale)

cv2.imshow('output',img)
cv2.waitKey(0)
#cv2.imwrite('images/BGR_90.jpg',img,[int(cv2.IMWRITE_JPEG_QUALITY), 90])
cv2.destroyAllWindows()
以下是我的程序的输出图像:


感谢阅读,非常感谢您的帮助:)

在将
diff\u mean
更改为数组之前,请使用此列表理解

diff_mean=[[mean_values[i][j]-mean_values[i-1][j] for j in range(3)] for i in range(1,len(mean_values))]
另外,如果
mean\u val
是一个元组,则应将
mean\u值.append([mean\u val])
更改为
mean\u值.append(mean\u val)

编辑: 或者,如果希望每个窗口之间的差异不存在下一行中最右侧窗口和最左侧窗口之间的差异,可以这样做(转换为数组后):


编辑2:更新代码,用于3元素元组列表/以及3D数组。

那么,您是否希望找到序列中相同空间位置的上一个窗口与相邻位置的窗口之间的差异?你想用这些不同的窗口做什么?考虑到当前帧中的一个位置和前一帧中的相同位置,如果在当前帧中没有目标空间位置而从当前帧中添加8个,并且从目标帧的空间位置从前一帧中添加17个位置,则需要考虑8个可能的位置。你想分析哪一个?@rayryeng我想做的是建立一个基本的阴影检测器,在场景中有阴影的地方,纹理的变化会很大,但颜色的变化会很小。对于纹理,我使用方差;对于颜色,我使用平均RGB。所以我需要在图像中找到发生这种情况的地方,这正是我正在努力解决的问题。我需要看看周围的9个位置,还是只看前一个位置?啊,这取决于你分析的块有多大。块越大,只需查看上一个位置就足够了。但是,块越小,则可能需要查看相邻位置。你现在只想看上一个块吗?@rayryeng是的,我想如果我现在只看上一个块就可以了。根据你的第一个建议,我得到了每个数组输出两个浮点值,我不确定它们是什么意思。我想要的是前一个窗口的R、G、B通道之间的差异,这样我就可以找到颜色的变化,难道我不应该期望三个输出,每个颜色通道的差异一个吗?@NeilVicker我编辑了代码,希望它现在能工作。我尝试了你说的,但我仍然只有两个输出
mean_values
是一个包含三个元素的数组,每个颜色通道一个元素,因此我不确定为什么会得到两个输出。您是否更改了
mean_values.append([mean_val])
mean_val.append(mean_val)
?我做了,仍然给出了两个输出
 diff_mean=mean_values[:,:,:-1]-mean_values[:,:,1:]