Использование 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 вы используете ядро с одним элементом...