#python #opencv #matrix-multiplication #grayscale
Вопрос:
Я загрузил изображение с помощью cv2.imread()
Colab и преобразовал его в изображение в оттенках серого. У меня есть матрица B
, которую я извлек из того же изображения в оттенках серого. Но когда я пытаюсь умножить его сам по себе, то есть когда я оцениваю B@B
, то результат получается матрицей , но его записи не такие, как мы получим при умножении BxB
:
print("Required matrix is:n", b)
print("BxB is:n", b*b)
Как я доберусь BxB
?
Ответ №1:
Для массивов NumPy *
оператор выполняет поэлементное умножение:
result[0, 0] = b[0, 0] * b[0, 0]
В вашем случае, скорее всего , так и есть dtype=np.uint8
, например, вы столкнулись с переполнением целых чисел:
result[0, 0] = b[0, 0] * b[0, 0] = 234 * 234 = 54576
Поскольку np.uint8
он ограничен диапазоном значений [0, ..., 255]
, вам нужно будет получить 54576 % 256 = 228
, который является вашим result[0, 0]
.
Итак, если вы действительно хотите иметь поэлементное умножение без переполнения целых чисел, преобразуйте b
np.int
, например, в.
Или, если вы действительно хотите иметь реальное матричное умножение, также преобразуйте b
в np.int
, но также используйте соответствующий @
оператор.
Вот несколько кодов для различных вариантов использования:
import numpy as np
b = np.array([[234, 229], [129, 11]], np.uint8)
print('Matrix b:n', b, 'n')
# Matrix b:
# [[234 229]
# [129 11]]
print('Element-wise multiplication b * b (np.uint8):n',
b * b, 'n')
# Element-wise multiplication b * b (np.uint8):
# [[228 217]
# [ 1 121]]
print('Element-wise multiplication b * b (np.int):n',
np.int_(b) * np.int_(b), 'n')
# Element-wise multiplication b * b (np.int):
# [[54756 52441]
# [16641 121]]
print('Element-wise multiplication b * b (np.int) % 256:n',
(np.int_(b) * np.int_(b)) % 256, 'n')
# Element-wise multiplication b * b (np.int) % 256:
# [[228 217]
# [ 1 121]]
print('Actual matrix multiplication b @ b (np.int):n',
(np.int_(b) @ np.int_(b)), 'n')
# Actual matrix multiplication b @ b (np.int):
# [[84297 56105]
# [31605 29662]]
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.9.1
PyCharm: 2021.1.1
NumPy: 1.20.2
----------------------------------------
Комментарии:
1. Большое спасибо!