Применить фильтр sobel для обнаружения краев в emgucv

Я пытаюсь применить фильтр Собела к моему изображению, чтобы обнаружить края, как вы можете видеть здесь:

Image<Gray, Byte> imgProcessed1;
private void Form1_Load(object sender, EventArgs e)
{Image<Bgr, Byte> imgProcessed=new Image<Bgr, byte>(@"C:\Users\Public\Pictures\Sample Pictures\1.jpg");

imgProcessed1 = imgProcessed.Convert<Gray, byte>();
Image<Gray, Single> img_final = (imgProcessed1.Sobel(1, 0, 5));
pictureBox1.Image = img_final.ToBitmap();
}

но результат очень необычный, я такой новый в opencv.

мой вывод

введите описание изображения здесь

Мне нужен этот результат.

введите описание изображения здесь

мне просто нужно применить этот фильтр

введите описание изображения здесь

0

Решение

спасибо всем мой друг, я наконец нашел решение:

Image<Gray, byte> gray = new Image<Gray, byte>(@"C:\Users\Public\Pictures\Sample Pictures\1.jpg");
Image<Gray, float> sobel = gray.Sobel(0, 1, 3).Add(gray.Sobel(1, 0, 3)).AbsDiff(new Gray(0.0));
pictureBox1.Image = sobel.ToBitmap();
4

Другие решения

Согласно документации opencv:

http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/sobel_derivatives/sobel_derivatives.html

Вы должны использовать оператор sobel следующим образом:

Sobel( src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT );

Функция принимает следующие аргументы:

  1. src_gray: в нашем примере входное изображение. Вот это CV_8U
  2. grad_x / grad_y: выходное изображение.
  3. ddepth: глубина выходного изображения. Мы установили его на CV_16S, чтобы избежать
    переполнение.
  4. x_order: порядок производной в направлении x.
  5. y_order: порядок производной в направлении y.
  6. scale, delta и BORDER_DEFAULT: мы используем значения по умолчанию.

Я надеюсь, что это поддержит ваш вопрос.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector