Нахождение пересечения линий - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Дано изображение с белым фоном и черными пересекающимися линиями. Надо найти координаты пересечения линий. ( координаты линий не заданы) Прошу хоть как-то что-то подсказать по решению этой задачи.

Решение задачи: «Нахождение пересечения линий»

textual
Листинг программы
namespace WindowsFormsTest {
    using System;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;
    using System.Windows.Forms;
 
    using AForge.Imaging;
    using AForge.Imaging.Filters;
 
    public partial class Form1 : Form {
        private Bitmap _image;
 
        public Form1() {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e) {
            int h = 200;
            _image = new Bitmap(h, h, PixelFormat.Format24bppRgb);
            var r = new Random();
            using (Graphics g = Graphics.FromImage(_image)) {
                g.CompositingQuality = CompositingQuality.HighQuality;
                g.SmoothingMode = SmoothingMode.HighQuality;
 
                g.Clear(Color.Black);
                var pen = new Pen(Color.White, 1.5f);
                for (int i = 0; i < 10; i++) {
                    g.DrawLine(pen, r.Next(h), r.Next(h), r.Next(h), r.Next(h));
                }
            }
            pictureBox1.Image = _image;
        }
 
        private void button2_Click(object sender, EventArgs e) {
            Bitmap clone = _image.Clone(new Rectangle(0, 0, 200, 200), PixelFormat.Format8bppIndexed);
 
// Выделяем пересечения линий.
            Bitmap vImage = new Erosion(new short[,]
                {
                    { 1, 0, 1 },
                    { 0, 1, 0 },
                    { 0, 1, 0 }
                }).Apply(clone);
 
// Отбрасываем лишние срабатывания.
            vImage = new Threshold().Apply(vImage);
            
// Строим прямоугольники вокруг найденный пересечений.
            var blobCounter = new BlobCounter();
            blobCounter.ProcessImage(vImage);
 
            using (Graphics g = Graphics.FromImage(_image)) {
                var pen = new Pen(Color.Red, 2.5f);
                foreach (Blob blob in blobCounter.GetObjectsInformation()) {
                    g.DrawRectangle(pen, blob.Rectangle);
                }
            }
 
            pictureBox1.Image = _image;
            pictureBox2.Image = vImage;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы