Как я могу обнаружить (дефицит / объекты) бутылки с помощью C # -EmguCV? - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь использовать C # -EmguCV, чтобы найти дефицит на бутылке ... Пока что я сделал следующие шаги: 1-Преобразование изображения BGR-в-СЕРЫЙ 2-бинаризация (делая фон черным) 3-Erode 4-Masking5-Crop

-My Входное изображение: введите описание изображения здесь - После бинаризации, эрозии и маскировки : введите описание изображения здесь

- После кадрирования : введите описание изображения здесь

-> Как определить дефицит, как показано ниже-Lab результат изображения: введите описание изображения здесь

im, используя следующий код:

                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);


                //Masking(And) 
                Img1AndImg2 = ImgInput.Convert<Gray, byte>();//Convert BGR-GRAY
                CvInvoke.BitwiseAnd(ImgGray, ImgBinariz.Dilate(1).Erode(5), Img1AndImg2);//  the background is black 
                pictureBox1.Image = Img1AndImg2.Bitmap;


                //Cropping Objects from Segmented Images
                VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
                Mat m = new Mat();
                CvInvoke.FindContours(Img1AndImg2, contours, m, Emgu.CV.CvEnum.RetrType.External,//the image i need Croppe from it
                    Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);
                if (contours.Size > 0)
                {
                    Rectangle bbox = CvInvoke.BoundingRectangle(contours[0]);
                    Img1AndImg2.ROI = bbox;
                    var img = Img1AndImg2.Copy();
                    Img1AndImg2.ROI = Rectangle.Empty;

                    pictureBox1.Image = img.Erode(3).Bitmap; //CC = imerode(Iobj, ones(erode)); image erode --->make the diffect as squer  


                }
...