Member 14086833 Ответов: 0

Используя (C# , библиотека emgu), как я могу найти определение дефицита бутылки?


Я хочу найти дефицит на бутылке,используя Языке C#EmguCV ,нужно знать этапы обработки изображения-prepossessing && выберите дефицит для расчета его площади ..

Мое входное изображение:
1.jpg - Google Диск[^]

Необходимый результат
Выходное изображение, показывающее, где находится дефект, выполненный с помощью Матлаб После того, как образ-располагающий
2.jpg - Google Диск[^]

Что я уже пробовал:

Как показано ниже кода я пытаюсь сначала :
1-преобразование изображения BGR-to-GRAY
2-пороговое значение бинаризации (делает фон черным)
3-Erode -->На данный момент результат в виде изображения: 3.PNG - Google Диск[^]
Как вы видите ,перебежчики все еще находятся на изображении, и это неправильно, потому что я не могу использовать маскировку на изображении ..

Я не знаю шагов/или того, что я делаю после эрозии, как я могу поставить круг вокруг дефицита
4-После этой маскировки...?



<pre>  Image<Bgr, byte> ImgInput;
        Image<Gray, byte> ImgGray;
        Image<Gray, byte> ImgBinariz;


        public Home()
        {
            InitializeComponent();
        }


        private void openToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog ofd = new OpenFileDialog();

                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    ImgInput = new Image<Bgr, byte>(ofd.FileName);// 3 dimension
                    ImgGray = ImgInput.Convert<Gray, byte>();//Convert BGR-GRAY
                    pictureBox1.Image = ImgGray.Bitmap;

                    //Binarization  thresholding
                    ImgBinariz = new Image<Gray, byte>(ImgGray.Width, ImgGray.Height, new Gray(0));//binay imge with black background
                    // pictureBox1.Image = ImgBinariz.Bitmap; //Make all the image black
                    CvInvoke.Threshold(ImgGray, ImgBinariz, 50, 255, ThresholdType.Otsu);

                     pictureBox1.Image = ImgBinariz.Erode(5).Bitmap;
                    //pictureBox1.Image = ImgBinariz.Bitmap;

                }

            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

0 Ответов