6
ISSN 2616-8901. Математика және жаратылыстану-техникалық сериясы № 4/ 2018 OpenCV мысалдары.OpenCV кітапханасын пайдалану ауқымы өте кең. Осыған орай бірінші
мысал ретінде суреттегі геометриялық пішіндерді табатын бағдарлама көрсетілген (сурет 1).
Сурет 1. Пішінді анықтау бағдарламасы
Суреттен көріп отырғандай, пайдаланушының Paint бағдарламасы көмегімен салынған
суретке OpenCV кітапханасымен жасалған бағдарлама толықтай, әрбір пиксельді есептеу
арқылы сараптама жүргізіп, табылған геометриялық пішіндерді анықтап, көрсетіп тұр. Бұл
бағдарлама контур класын пайдалана отырып, суретке алдымен сараптама жүргізеді. Сараптама
нәтижесінде пайда болған сандық сурет шуының көмегімен суретте табылған геометриялық
пішіндерді жадқа көшіріп, кейін экран бетіне шығарады.
Бастапқы суретті жүктеу үшін төмендегі код орындалады: Image img =
new Image(fileNameTextBox.Text)
.Resize(400, 400, Emgu.CV.CvEnum.Inter.Linear, true);
Суретке сараптама жүргізетін код: UMat uimage = new UMat();
CvInvoke.CvtColor(img, uimage, ColorConversion.Bgr2Gray);
UMat pyrDown = new UMat();
CvInvoke.PyrDown(uimage, pyrDown);
CvInvoke.PyrUp(pyrDown, uimage);
Дөңгелек пішінді анықтайтын код: #region circle detection
Stopwatch watch = Stopwatch.StartNew();
double cannyThreshold = 180.0;
double circleAccumulatorThreshold = 120;
CircleF[] circles = CvInvoke.HoughCircles(uimage,
HoughType.Gradient, 2.0, 20.0, cannyThreshold,
circleAccumulatorThreshold, 5);
watch.Stop();
msgBuilder.Append(String.Format("Hough
circles
-
{0}
ms;
",
watch.ElapsedMilliseconds));
#endregion
Сызықты анықтайтын код: #region Canny and edge detection
watch.Reset(); watch.Start();
double cannyThresholdLinking = 120.0;
UMat cannyEdges = new UMat();
CvInvoke.Canny(uimage, cannyEdges, cannyThreshold, cannyThresholdLinking);
LineSegment2D[] lines = CvInvoke.HoughLinesP(cannyEdges,
1, //Distance resolution in pixel-related units
Math.PI/45.0, //Angle resolution measured in radians.