Большая цель здесь - обработка изображения: обнаружение краев и цвета в данном jpg-изображении.
Я создал двухмерный массив в маске на основе верхнего ответа в этом посте: https://stackoverflow.com/a/38194016/9700646
поэтому у меня есть следующее, которое должно маскировать все 0 в двумерном массиве как замаскированное:
color_matrix[~np.array(0)]
Я просто не уверен, как это сделать.У кого-нибудь есть идея?
В конце концов мне нужно разработать третью матрицу, просматривая два двумерных маскированных массива.
Вот некоторый код, чтобы дать вам представление о том, что у меня есть:
В этом первом блоке я создаю 'edge_matrix'.Я также маскирую это в конце.'Color_matrix' создается в аналогичном процессе.
def edge_matrix(canny_pic):
#edge_matrix = [[0 for x in range(RESOLUTION_WIDTH)] for y in range(RESOLUTION_HEIGHT)]
edge_matrix = np.zeros((RESOLUTION_HEIGHT,RESOLUTION_WIDTH,1),dtype = "uint8")
# get Canny pic
img = canny_pic #the first element of canny_pic is the picture, the others are the upper and lowers
# make matrix of edges
for i in range(RESOLUTION_HEIGHT):
for j in range(RESOLUTION_WIDTH):
#print(i,j)
color = img[i,j]
edge_matrix[i,j]=(color[0] or color[1] or color[2] ) and 1
return edge_matrix
Затем я хочу объединить эти матрицы, пройдя через матрицу ребер и сказав: всякий раз, когда есть ребро (1), посмотрите на 10 пробеловвокруг этого пикселя в color_matrix и посмотреть, был ли обнаружен цвет.если это так, отметьте его как 1 в комбинированном_матрице.
def reduce_problem(color_mat, edge_mat):
#this function will help reduce the number of location the object may be in by combining the colors and edges
#create a matrix to store the possible locations of the correct object.
#combined_matrix = [[0 for x in range(RESOLUTION_WIDTH)] for y in range(RESOLUTION_HEIGHT)] #same size as image. 1 = a spot with both edge and color; 0 = a spot without both
combined_matrix = np.zeros((RESOLUTION_HEIGHT,RESOLUTION_WIDTH, 1), dtype = "float32")
for i in range(10,RESOLUTION_HEIGHT-11): #loop through color matrix
for j in range(10,RESOLUTION_WIDTH-11):
if edge_mat[i,j] == 1:
#if this edge matrix location has an edge(1), go to the color matrix and check the 10 spaces surrounding it in each direction for any color(1) value (in respect to the corresponding space)
for k in range(i-10, i+10):
#if k >= 0 and k < RESOLUTION_HEIGHT:
for m in range(j-10, j+10):
#if m >= 0 and m < RESOLUTION_WIDTH:
if color_mat[k,m] ==1:
#print(k, m)
combined_matrix[i,j] += 1/441
Это работает для определения цвета и краев.Но это очень медленно и слишком медленно для обнаружения объектов в реальном времени.Я надеялся, что использование замаскированных массивов для итерации поможет ускорить процесс.