Получение ошибки при попытке сделать морфологические преобразования на матрице 8x8 - PullRequest
1 голос
/ 05 мая 2019

Я пытаюсь сделать морфологические преобразования на матрице 8x8 с крестообразным ядром 3x3. Я хочу применить эрозию, расширение, открыть и закрыть с A1 с ядром B1. Я получаю сообщение об ошибке и не знаю, как решить проблему. Here what the matrix and kernel look like

Это то, что я имею до сих пор.

import cv2 as cv
import numpy as np

# A1 = 8x8 matrix
A1 = np.array([[0,0,0,0,0,0,0,0],
               [0,0,0,1,1,1,1,0],
               [0,0,0,1,1,1,1,0],
               [0,1,1,1,1,1,1,0],
               [0,1,1,1,1,1,1,0],
               [0,1,1,1,1,0,0,0],
               [0,1,1,1,1,0,0,0],
               [0,0,0,0,0,0,0,0]])

# Cross-shaped kernel (structuring element)
cv.getStructuringElement(cv.MORPH_CROSS,(3,3))
kernel = np.array ([[0, 1, 0],
                    [1, 1, 1],
                    [0, 1, 0]], dtype = np.uint8)

# Dilation
dilation = cv.dilate(A1,kernel,iterations = 1)
cv.imshow('dilation', dilation)

# Erosion
erosion = cv.erode(A1,kernel,iterations = 1)
cv.imshow('erosion', erosion)

# Opening
opening = cv.morphologyEx(A1, cv.MORPH_OPEN, kernel)
cv.imshow('opening', opening)

# Closing
closing = cv.morphologyEx(A1, cv.MORPH_CLOSE, kernel)
cv.imshow('closing', closing)

cv.waitKey(0)
cv.destroyAllWindows()
cv.waitKey(1)  # If I dont have this line then the window won't close for me on my mac when I enter a key

Не знаю, почему я получаю эту ошибку?


  File "/Users/p/.spyder-py3/My_OpenCV_Files/Homework3_CSC317/Hw3-problem1.py", line 24, in <module>
    dilation = cv.dilate(A1,kernel,iterations = 1)

error: OpenCV(3.4.2) /opt/concourse/worker/volumes/live/
9523d527-1b9e-48e0-7ed0a36adde286f0/volume/opencvsuite_1535558719691/work
/modules/imgproc/src/morph.cpp:973: 
error: (-213:The function/feature is not implemented) Unsupported data type (=4) in function 'getMorphologyFilter'

1 Ответ

1 голос
/ 05 мая 2019

Ваше сообщение об ошибке

Неподдерживаемый тип данных (= 4) в функции 'getMorphologyFilter'

Говорит, что cv.dilation не поддерживает тип данных входного изображения ( тип 4 имеет 32-разрядное целое число со знаком ).

В документации говорится, что поддерживаются следующие типы: CV_8U, CV_16U, CV_16S, CV_32F и CV_64F.

Таким образом, решение состоит в том, чтобы просто создать массив с одним из этих типов в качестве входных данных.

...