Построение гистограммы для определения максимальной интенсивности градиентов на изображении - PullRequest
2 голосов
/ 10 января 2020

У меня есть это изображение,

source

, в котором я хочу выполнить расчет градиента с использованием фильтра sobel:

kx = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]], np.float32)
ky = np.array([[1, 2, 1], [0, 0, 0], [-1, -2, -1]], np.float32)

ix = ndimage.filters.convolve(img, kx)
iy = ndimage.filters.convolve(img, ky)

g = np.hypot(ix, iy)
g = g / g.max() * 255
theta = np.arctan2(iy, ix)

Я хочу построить * Значение 1009 * в гистограмме позволяет определить диапазон интенсивности градиента на изображении. Когда я пытаюсь histr = cv2.calcHist([g], [0], None, [256], [0, 256]), это выдает мне следующую ошибку:

TypeError: тип данных images = 23 не поддерживается

Я хотел знать, как я могу построите график интенсивности градиентов на гистограмме, чтобы определить диапазон.

1 Ответ

2 голосов
/ 10 января 2020

Как указывается в сообщении об ошибке, тип вашего g кажется неподдерживаемым. Давайте посмотрим на документацию cv2.calcHist:

images Исходные массивы. Все они должны иметь одинаковую глубину, CV_8U, CV_16U или CV_32F, и одинаковый размер. Каждый из них может иметь произвольное количество каналов.

Запуск вашего кода как есть, g имеет тип np.float16. Итак, все следующие исправления работают:

histr = cv2.calcHist([g.astype(np.uint8)], [0], None, [256], [0, 256])

histr = cv2.calcHist([g.astype(np.uint16)], [0], None, [256], [0, 256])

histr = cv2.calcHist([g.astype(np.float32)], [0], None, [256], [0, 256])

Просто выберите тот, который лучше всего соответствует вашим потребностям.

Надеюсь, что поможет!

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