Сделайте массив как numpy.array () без numpy - PullRequest
1 голос
/ 25 сентября 2019

У меня есть задача обработки изображений, и нам запрещено использовать NumPy, поэтому нам нужно кодировать с нуля.Я сделал преобразование логического изображения, но теперь я застрял в создании массива без numpy.

Итак, вот мой последний выходной код:

Output :
new_log =
[[236, 
  232, 
  226, 
  .
  .
  .
 198,
 204]]

Мне нужно преобразовать это вмассив, чтобы я мог написать изображение, как это (с Numpy)

new_log =
array([[236, 232, 226, ..., 208, 209, 212],
       [202, 197, 187, ..., 198, 200, 203],
       [192, 188, 180, ..., 205, 206, 207],
       ...,
       [233, 226, 227, ..., 172, 189, 199],
       [235, 233, 228, ..., 175, 182, 192],
       [235, 232, 228, ..., 195, 198, 204]], dtype=uint8)
cv.imwrite('log_transformed.jpg', new_log) 
# new_log must be shaped like the second output

1 Ответ

0 голосов
/ 25 сентября 2019

Вы можете сделать простую функцию, чтобы взять ваш список и изменить его форму аналогично NumPy's np.reshape().Но это не будет быстрым, и он ничего не знает о типах данных (NumPy's dtype), так что ... мой совет - бросить вызов тому, кому не нравится NumPy.Особенно, если вы используете OpenCV - , это зависит от NumPy !

Вот пример того, что вы можете сделать в чистом Python:

def reshape(l, shape):
    """Reshape a list.

    Example
    -------
    >>> l = [1,2,3,4,5,6,7,8,9]
    >>> reshape(l, shape=(3, -1))
    [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    """
    nrows, ncols = shape
    if ncols == -1:
        ncols = len(l) // nrows
    if nrows == -1:
        nrows = len(l) // ncols
    array = []
    for r in range(nrows):
        row = []
        for c in range(ncols):
            row.append(l[ncols*r + c])
        array.append(row)
    return array
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...