Различные типы результатов для np., Где x, y меняются местами в двух условиях. Что мне не хватает? - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь инициализировать два массива image и a .

In image Я заполняю контуры значением цвета 255 в контурах cnt , который находится в порядке x, y.

И в массиве a я присваиваю значение 1 для a [2] [0 ]. где 2 - точка оси x, а 0 - точка оси y.

Но в результате я получаю порядок изображения в массиве y, массиве x, но в a это массив x , y array.

Где я делаю ошибку ???

import cv2
import numpy as np
image = np.zeros((700,700),dtype=np.int32)
cnt = np.array([[340, 157], [695, 157], [695, 309], [340, 309], [340, 157]])

image = cv2.fillPoly(image,[cnt],color=255)

a = np.zeros((10,10),dtype=np.int32)
a [2][0] = 1

print(np.where(a>0)) #output_1
print(np.where(image>0)) #output_2

output_1 : (array ([2]), array ([0]) )

output_2 : (массив ([157, 157, 157, ..., 309, 309, 309]), массив ([340, 341, 342, ..., 693, 694, 695]))

1 Ответ

1 голос
/ 06 августа 2020

Ошибки с кодом нет. Я переписал это, используя numpy срезов, чтобы заполнить части массива.

import cv2
import numpy as np
image = np.zeros((700,700),dtype=np.int32)
print(image.shape)
# cnt = np.array([[340, 157], [695, 157], [695, 309], [340, 309], [340, 157]])
image[157:309, 340:695] = 255

# image = cv2.fillPoly(image,[cnt],color=255)
print(image.shape)

a = np.zeros((10,10),dtype=np.int32)
a [2, 0:5] = 1

print(np.where(a>0)) #output_1
print(np.where(image==255)) #output_2
(array([2], dtype=int64), array([0], dtype=int64))
(array([157, 157, 157, ..., 308, 308, 308], dtype=int64), array([340, 341, 342, ..., 692, 693, 694], dtype=int64))

Если вы посмотрите на это, image[157:309, 340:695] = 255 срез по оси x описывается столбцами, и срез по оси Y по строкам. Часть cnt вашего кода описывает диапазон строк от 157-309 и диапазон столбцов от 340-695, и поэтому вывод.

...