Может ли OpenCV выполнять морфологическое расширение в градациях серого? - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу использовать OpenCV для выполнения морфологического расширения в градациях серого. Это кажется очень простым, но мне не удалось это сделать. Поэтому мне интересно, возможно ли это сделать с помощью OpenCV?

Для проверки результатов я создал MWE, сравнивающий OpenCV и SciPy. Сципи, похоже, дает ожидаемые результаты, а OpenCV - нет. К сожалению, из-за других ограничений мне приходится использовать OpenCV, а не Scipy, и делать морфологическое расширение в оттенках серого. Из MWE представляется возможным выполнить бинарную морфологическую дилатацию.

MWE:

import cv2
import scipy
import scipy.ndimage
import numpy as np

print('start test')
image=np.array( [[0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0],
  [0, 0, 25, 0, 0],
  [0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0]] )
Kernel=np.array([[0, 1, 0],
       [1, 1, 1],
       [0, 1, 5]])
print('input')
print(image)

image=image.astype('uint8')
Kernel=Kernel.astype('uint8')
output=cv2.dilate(image, Kernel)
print('OpenCV')
print(output)

Output2=scipy.ndimage.grey_dilation(image, structure=Kernel)
print('Scipy')
print(Output2)

print('end test')

Результаты:

start test
input
[[ 0  0  0  0  0]
 [ 0  0  0  0  0]
 [ 0  0 25  0  0]
 [ 0  0  0  0  0]
 [ 0  0  0  0  0]]
OpenCV
[[ 0  0  0  0  0]
 [ 0 25 25  0  0]
 [ 0 25 25 25  0]
 [ 0  0 25  0  0]
 [ 0  0  0  0  0]]
Scipy
[[ 5  5  5  5  5]
 [ 5 25 26 25  5]
 [ 5 26 26 26  5]
 [ 5 25 26 30  5]
 [ 5  5  5  5  5]]
end test

Таким образом, существует простой способ (или вариант) выполнить морфологическое расширение в градациях серого с помощью OpenCV и получить тот же результат, что и SciPy?

1 Ответ

0 голосов
/ 09 апреля 2020

OpenCV использовал элемент плоской структуры:

[[1, 1, 1],
 [0, 1, 1]]

Scipy использовал неплоский структурирующий элемент:

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