Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/30: Рейтинг темы: голосов - 30, средняя оценка - 4.97
25 / 16 / 1
Регистрация: 20.12.2012
Сообщений: 122

Работа с OpenCvSharp: определение автомобильного номера

29.10.2014, 14:23. Показов 6361. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день, помогите новичку пожалуйста начал осваивать библиотеку OpenCvSharp, нашел рабочий пример - .
http://derindelimavi.wordpress... -okuma-ii/
На данный момент распознавание меня не интересует, меня интересует только ОПРЕДЕЛЕНИЕ номера на картинке.

У меня два вопроса:

1) Как убирать лишние прямоугольники, чтоб красным был выделен, только номер( пример на картинке)

2) С какими параметрами надо "поиграть" чтоб определяло номер, как на вот этой картинке.

Вот код, в котором я пытался разобраться.

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
using System.IO;
using System.Diagnostics;
using System.Collections.Generic;
using OpenCvSharp;
using OpenCvSharp.Blob;
using System;
using System.Drawing;
 
namespace AutoNumberDetection
{
 
    class AutoDetection
    {
 
        public IplImage src; // Исходное изображение
        IplImage timg;
        IplImage pimg;
        CvBlobs blobs;
        public List<IplImage> plate = new List<IplImage>();
        public List<string> plateList = new List<string>();
        List<Point> listPoint = new List<Point>();
        bool imageready = false;
 
        #region Метод проверки наличия изображения
        public bool LoadImage(string fname)
        {
            src = new IplImage(fname, LoadMode.Color);
            if (src != null)
                imageready = true;
 
            return imageready;
        }
        #endregion
 
        #region Метод проверки полученного изображения
        public void SetImage(IplImage tsrc)
        {
            if (src != null)
                Cv.ReleaseImage(src);
            src = tsrc;
        }
 
        #endregion
 
        #region Метод обработки изображения для определения наличия номера на картинке
        public void PreProcess()
        {
            IplConvKernel element = Cv.CreateStructuringElementEx(21, 3, 10, 2, ElementShape.Rect, null); // Создаём структурирующий элемент(ядро) для работы с изображением
            timg = new IplImage(src.Size, BitDepth.U8, 1); // Линейная коррекция результатов
            IplImage temp = timg.Clone();// temp - для промежуточного хранения результатов 
            IplImage dest = timg.Clone(); // dest - изображения для сохранения результата
            src.CvtColor(timg, ColorConversion.RgbaToGray);//преобразование цветового пространства (из цветного в градации серого)
            pimg = timg.Clone();
            Cv.Smooth(timg, timg, SmoothType.Gaussian); // Сглаживание изображения по гауссине(гауссина-математическая функция)
            Cv.MorphologyEx(timg, dest, temp, element, MorphologyOperation.TopHat, 1);// Выполняет сложные морфлогические преобразования, а конкретно изолирует яркие локальные пики
            Cv.Threshold(dest, timg, 0, 255, ThresholdType.Binary | ThresholdType.Otsu);//приведение точек, которые темнее/светлее определенного уровня(50) к черному(0) или белому цвету(255)
            Cv.Dilate(dest, dest, element, 2); // Морфологическая операция, растягивание изображения
           
          
 
        }
        #endregion
        
        #region Метод поиска наличия номера на картинке
        public int FindPlates()
        {
            
            blobs = new CvBlobs(); // Инициализация конструктора для которые содержат информацию о фрагментах изображений
            plate.Clear(); // Очистка списка изображений
            CvBlobLib.Label(timg, blobs);
            CvBlobLib.FilterByArea(blobs, 300, 5000);// Фильтрует части изображения, те части изображения которые не входят в диапазон - будут удалены
            
            IplImage srctemp = src.Clone();
            listPoint.Clear();
            
            
            foreach (var item in blobs) // Перебор значений в фрагментах изображений
            {
                item.Value.SetImageRoiToBlob(pimg);
                
                double ratio = (double)item.Value.Rect.Width / (item.Value.Rect.Height); // Коэффициент вычисления отношения ширины и высоты прямоугольника
                double angle = (double)item.Value.Angle();
                if (ratio > 3.4 && ratio < 6.6 && angle > -15 && angle < 15)// Прямоугольник с отношением ширины и высоты, а также угол обзора
                {
                    IplImage platetemp = new IplImage(new CvSize(pimg.ROI.Width, pimg.ROI.Height), pimg.Depth, pimg.NChannels); // Создание нового изображения с точным размером прямоугольника
                    Cv.Resize(pimg, platetemp); // Изменение размера изображения
                    listPoint.Add(new Point(item.Value.Rect.X, item.Value.Rect.Y)); // Добавление координат на картинку
                    plate.Add(platetemp); // Добавление изображения в список
                    src.Rectangle(item.Value.Rect, new CvScalar(0, 0, 255), 4, LineType.Link4);
                }
 
               
            }
 
            src.ResetROI();
            return plate.Count;
 
        }
 
        #endregion
 
        public List<Point> FindCoordinates() // Функция поиска координат
        {
 
            return listPoint;
           
           
        }
 
    }
}


Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using OpenCvSharp.Extensions;
using System;
using System.IO;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Drawing;
 
 
namespace AutoNumberDetection
{
 
 
    public partial class MainForm : Form
    {
        AutoDetection Detect = new AutoDetection(); // Создание экземпляра класса
 
        public MainForm()
        {
            InitializeComponent();
        }
 
        #region Событие - загрузка изображения
        private void btn_open_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.Title = "Выберите картинку";
            openFile.FileName = "*.jpg";
            if (openFile.ShowDialog() == DialogResult.OK)
            {
                if (Detect.LoadImage(openFile.FileName))
                {
                    pict_box_first.Image = BitmapConverter.ToBitmap(Detect.src);
                    btn_detect.Enabled = true;
                    numericUpDown1.Enabled = false;
                    numericUpDown1.Value = 1;
                    pict_box_last.Image = null;
                    lstbox_cordin.DataSource = null;
                    lstbox_cordin.Items.Clear();
                }
            }
 
 
        }
        #endregion
        List<Point> lstPoint=new List<Point>();
        #region Событие - обработка изображения
        private void btn_detect_Click(object sender, EventArgs e)
        {
            
            Detect.PreProcess();// Запусk метода обработки картинки
            int n = Detect.FindPlates(); // присваивание переменной и запуск метода нахождения номеров
            if (n == 0) return;
            pict_box_first.Image = BitmapConverter.ToBitmap(Detect.src);// Конвертирования исходного изображения 
            btn_save.Enabled = true; //Активация кнопки сохранения изображения
            numericUpDown1.Enabled = true;
            numericUpDown1.Maximum = n;
            numericUpDown1.Value = 1; // Изначальное значение
            pict_box_last.Image = BitmapConverter.ToBitmap(Detect.plate[0]);
            lstPoint = Detect.FindCoordinates();
            lstbox_cordin.DataSource = lstPoint;
 
 
 
        }
        #endregion
 
        #region Метод просмотра полученных изображений с помощью numericUpDown
        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            pict_box_last.Image = BitmapConverter.ToBitmap(Detect.plate[(int)numericUpDown1.Value - 1]);
            lstbox_cordin.SelectedIndex = Convert.ToInt32(numericUpDown1.Value)-1;
        }
        #endregion
 
        #region Событие - сохранение файла на пк
        private void btn_save_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFile = new SaveFileDialog(); // Инициализация класса, который предлагает пользователю сохранить данное изображение
            
            saveFile.Filter = "Images(*.jpg; *.jpeg; *.mjpeg)|*.jpg;*.jpeg;*.mjpeg;| JPG(*.jpg;)|*.jpg;";
            if (saveFile.ShowDialog() == DialogResult.OK)
            {
                pict_box_last.Image.Save(saveFile.FileName);
            }
        }
        #endregion
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void numericUpDown1_KeyDown(object sender, KeyEventArgs e)
        {
            lstbox_cordin.SelectedItem = e.KeyValue;
        }
 
        private void btn_exit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
 
    }
}
Миниатюры
Работа с OpenCvSharp: определение автомобильного номера   Работа с OpenCvSharp: определение автомобильного номера  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.10.2014, 14:23
Ответы с готовыми решениями:

OpenCVSharp определение контуров
Доброго времени суток! Нужен код определения контуров(пишу диплом- распознавание дор. знаков), например кольца(часть знака ограничения...

Ругулярное выражение автомобильного номера
Добрый день! Уважаемые программисты, кто может составить маленькую, несложную для опытного человека регулярочку. Необходимо проверить,...

Распознавание автомобильного номера на картинке
Всем привет! Решил разобраться с библиотеками в .NET, а именно OpenCV и OpenCVSharp. Создал форму, в которую с помощью picturebox...

2
0 / 0 / 0
Регистрация: 04.11.2015
Сообщений: 7
31.03.2016, 17:29
Не подскажешь как делал подключение библиотеки openCVSHARP?
0
 Аватар для fufel
20 / 20 / 6
Регистрация: 28.02.2011
Сообщений: 535
07.02.2017, 13:04
NoBODY18, - Привет, как успехи? разобрался?
Что интересного нашел? )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.02.2017, 13:04
Помогаю со студенческими работами здесь

Маска для автомобильного номера
Пример: Н435РН

Регулярное выражение для автомобильного номера
Автомобильный номер Германии состоит из кода региона (от одной до трёх прописных латинских букв), пробела, кода серии (одна или две...

Поиск и распознание автомобильного номера (OpenCV)
Всем привет. Нужно найти и распознать автомобильный номер с фото. Использую библиотеку OpenCV взятую тут Там есть пример распознания...

Является ли строка записью автомобильного номера
Автомобильные номера России в большинстве случаев состоят из первой буквы, трехзначного целого числа и последних двух букв. Программа...

Программа проверки правильности ввода автомобильного номера
Опять взываю к высшим.Прошу помочь.Задача звучит так:Автомобильные номера России в большинстве случаев состоят из первой буквы,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru