我的程序接收图像并将其分成网格(较小的图像),然后在网格的每个窗口处计算出平均RGB值。
我正在尝试计算窗口的mean_val
(平均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()
这是我的程序的输出图像:
感谢您的阅读,非常感谢任何帮助:)
答案 0 :(得分:1)
在将diff_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_val
是元组,则应将mean_values.append([mean_val])
更改为mean_values.append(mean_val)
修改强> 或者,如果您希望每个窗口之间存在差异而没有最右侧窗口和下面行中最左侧窗口之间的差异,您可以执行此操作(转换为数组后):
diff_mean=mean_values[:,:,:-1]-mean_values[:,:,1:]
编辑2:更新的代码,用于处理3元素元组/以及3D数组的列表。