Math.log (), обрабатывающий массив - PullRequest
0 голосов
/ 25 сентября 2019

Я использую Python, и я пытался сделать преобразование интенсивности изображения без NumPy.Итак, в процессе, мне нужно зарегистрировать () пиксель изображения с помощью math.log (), но похоже, что math.log () не может обработать массив, как это сделал numpy.

Должен ли я это сделатьручной цикл или есть какая-нибудь альтернатива?

Вот какой-то код:

import cv2 as cv
import numpy as np
import math

img = cv.imread("272.jpg", cv.IMREAD_GRAYSCALE)

print(img)
# Output :
# array([[ 80,  72,  58, ...,  74,  77,  82],
#      [ 65,  59,  50, ...,  87,  88,  91],
#      [ 50,  47,  43, ..., 120, 117, 117],
#      ...,
#      [168, 158, 144, ...,  44,  52,  65],
#      [168, 157, 142, ...,  69,  74,  85],
#      [170, 156, 138, ...,  92,  94, 100]], dtype=uint8)

print(np.log(img))
# this works

print(math.log(img))
# error

1 Ответ

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

Запустив math.log() в элементе списка, вы получите следующую ошибку: TypeError: only size-1 arrays can be converted to Python scalars, ig, массивы размера 1 относятся к одному элементу вашего многомерного массива.Например, map.log(img[0][0]) работает, поскольку это один элемент, поэтому, если вы хотите вычислить журнал, в математической библиотеке lib вы должны выполнить цикл с максимальной сложностью O (N ^ 2).Python решает эту проблему с помощью понимания списка , код ниже показывает одно возможное решение вашей проблемы (хотя вы можете найти более быстрое решение):

import cv2 as cv
import numpy as np
import math

img = cv.imread("272.jpg", cv.IMREAD_GRAYSCALE)

img_log = [[math.log(j) for j in img[i]] for i in range(len(img))]

print(img_log)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...