2015-10-13 3 views
0

Как я могу реализовать обработку изображений с открытием и закрытием с использованием новой версии emgu?Обработка изображений с открытием и закрытием с использованием emgu 3.0, MorphologyEx, C#

я нашел это один: www.stackoverflow.com/questions/11567350/opening-and-closing-using-opencv/

, но я не могу использовать «StructuringElementEx» больше, и новый «image.MorphologyEx()» метод требует немного больше значения.

Я также пробовал его с .dilate и .erode, но это возможно только с прямоугольной формой 3x3, что оказалось не совсем удачным.

«Обновленный» пример будет замечательным!

ответ

1

Также у вас такая же проблема с использованием MorphologyEx от Emgu CV 3.0
Я нашел этот тестовый код в Github.
Надеюсь, что эта помощь!

[Test] 
    public void TestMorphEx() 
    { 
    Mat kernel1 = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Cross, new Size(3, 3), new Point(1, 1)); 
    Matrix<byte> kernel2 = new Matrix<byte>(new Byte[3, 3] { { 0, 1, 0 }, { 1, 0, 1 }, { 0, 1, 0 } }); 
    //StructuringElementEx element2 = new StructuringElementEx(new int[3, 3] { { 0, 1, 0 }, { 1, 0, 1 }, { 0, 1, 0 } }, 1, 1); 
    Image<Bgr, Byte> tmp = new Image<Bgr, byte>(100, 100); 
    Image<Bgr, Byte> tmp2 = tmp.MorphologyEx(Emgu.CV.CvEnum.MorphOp.Gradient, kernel1, new Point(-1, -1), 1, CvEnum.BorderType.Default, new MCvScalar()); 
    Image<Bgr, Byte> tmp3 = tmp.MorphologyEx(Emgu.CV.CvEnum.MorphOp.Gradient, kernel2, new Point(-1, -1), 1, CvEnum.BorderType.Default, new MCvScalar()); 
    //Image<Bgr, Byte> tmp2 = tmp.MorphologyEx(element1, Emgu.CV.CvEnum.CV_MORPH_OP.CV_MOP_GRADIENT, 1); 
    //Image<Bgr, Byte> tmp3 = tmp.MorphologyEx(element2, Emgu.CV.CvEnum.CV_MORPH_OP.CV_MOP_BLACKHAT, 1); 
    } 
0

Эта функция не будет принимать Mat в EMGU 3.1

Я использую это те.

// Opening (erode->dilate) para quitar ruido. 
// get rid of small objects 
Mat kernelOp = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(3,3), new Point(-1, -1)); 
CvInvoke.MorphologyEx(ThresholdMask, _Morphology, MorphOp.Open, kernelOp, new Point(-1, -1), 1, BorderType.Default, new MCvScalar()); 

// Closing (dilate -> erode) para juntar regiones blancas. 
Mat kernelCl = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(11, 11), new Point(-1, -1)); 
CvInvoke.MorphologyEx(_Morphology, _Morphology, MorphOp.Close, kernelCl, new Point(-1, -1), 1, BorderType.Default, new MCvScalar());