Использование Erode и Dlate в Emgu (OpenCV для C#)

В отличие от привязок python для функции OpenCv Diate, версия C# имеет больше аргументов, которые являются обязательными, и я не уверен, что использовать для элементов для аргумента элемента. Я попробовал следующее, и вывод выглядит идентично inpur:

public static void Dilate(
    IInputArray src,
    IOutputArray dst,
    IInputArray element,
    Point anchor,
    int iterations,
    BorderType borderType,
    MCvScalar borderValue
)

В Python я бы сделал что-то вроде:

kernel = np.ones((5,5),np.uint8)

dilation = cv2.dilate(src, kernel,iterations=3)

В C# я пытался использовать значения по умолчанию. но вывод не выглядит иначе, чем ввод.

    ScalarArray elem = new ScalarArray(0);

    CvInvoke.Dilate(_cannyFrame
             , _dilatedCanny
             , elem
             , new Point(-1,- 1)
             , 6
             , BorderType.Constant 
             , new MCvScalar(255, 255, 255) );    

1 ответ

Попробуй это

Mat element = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Rectangle, new Size(3, 3), new Point(-1, -1));

CvInvoke.Dilate(_cannyFrame
         , _dilatedCanny
         , element 
         , new Point(-1,- 1)
         , 6
         , BorderType.Constant 
         , new MCvScalar(255, 255, 255) );   

Ошибка, кажется, в элементе структурирования. Вы используете elem равен нулю, и это не влияет на конечное изображение _dilatedCanny, В python вы используете ядро ​​с одним элементом...

Другие вопросы по тегам