Перейти к содержимому
Compvision.ru
dtritus

Распознавание чисел с картинки

Recommended Posts

1. есть Sum называется.

2 Умножите (на скаляр) изображение на 1/255 и получите нужные вам 0 и 1, правда проще  сумму разделить на 255, результат будет один. Чисто "черного или белого" формата в opencv нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я попробовал изучить пример кода, для работы с функциями bitwise:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
 
using namespace cv;
using namespace std;
 
int main(  )
{
    Mat drawing1 = Mat::zeros( Size(400,200), CV_8UC1 );
    Mat drawing2 = Mat::zeros( Size(400,200), CV_8UC1 );
 
    drawing1(Range(0,drawing1.rows),Range(0,drawing1.cols/2))=255; imshow("drawing1",drawing1);
    drawing2(Range(100,150),Range(150,350))=255; imshow("drawing2",drawing2);
	
	cout <<"pixels sum for drawing1: "<< sum(drawing1)/255<<endl;
	cout <<"pixels sum for drawing2: "<< sum(drawing2)/255<<endl;

 
    Mat res;
    bitwise_and(drawing1,drawing2,res);     
	imshow("AND",res);
	cout <<"pixels sum for AND: "<< sum(res)/255<<endl;

    bitwise_or(drawing1,drawing2,res);      
	imshow("OR",res);
	cout <<"pixels sum for OR: "<< sum(res)/255<<endl;

    bitwise_xor(drawing1,drawing2,res);     
	imshow("XOR",res);
	cout <<"pixels sum for XOR: "<< sum(res)/255<<endl;

    bitwise_not(drawing1,res);              
	imshow("NOT",res);
	cout <<"pixels sum for NOT: "<< sum(res)/255<<endl;
	

 
 
    waitKey(0);
    return(0);
}

 

Добавил вывод в консоль результата работы функции Sum.  Получается, что на выходе Scalar[a,b,c,d], для приведенного кода функция sum считает сумму пикселей только для части a, сумму разделил на 255 (как я понял).

Возникает вопрос: можно ли как-то получить значение отдельной части скаляра?

Возможно я до конца не понимаю что такое Scalar.

Второй вопрос: на практике же если я использую изображения с камеры, то получается другой результат, в  Scalar посчитаны составляющие для a,b и c, а составляющая d=0.

В конечном итоге мне нужна просто сумма пикселей, или каким-то образом преобразовать скаляр.

В спарвке я понятного объяснения что такое Scalar не нашел.

Буду признателен за помощь!!

 

 

result.jpg

result_real.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

The functions sum calculate and return the sum of array elements, independently for each channel.
Эта функция выдает скаляр состоящий из сумм для каждого канала, у вас изображение одноканальное и вам нужно использовать только  первое знание, и делите на 255 уже его а не весь скаляр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я поигрался с bitwise_xor. Я использовал эту функцию для распознавания цифр на дисплее прибора. Срабатывает не всегда удачно. Я предварительно записывал шаблоны цифр а потом с ними сравнивал изображение с дисплея прибора.

Возник вопрос: для повышения стабильности распознавания можно увеличить библиотеку шаблонов, или пойти по пути обучения каскадов харра? Мне кажется для простого распознавания показания прибора  достаточно расширить библиотеку шаблонов.

Кто уже сталкивался с такими задачками?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Каскады тут явно излишне,  ошибки в сегментации символов или в их распознавании? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ошибки в распознавании.  Скажем из 10 изображений 3-5 ошибочные.  На картинке конечно все распознано верно, но ошибки возникают.

Я долго думал и пришел к выводу, что нужно расширить библиотеку шаблонов

Как я понял мешают блики на экране, но это можно решить либо программно либо созданием какого-то внешнего короба.

my_prog.jpg

 

Кстати если говорить про блики. Будет ли работать такой алгоритм:

1) запоминаем изображение дисплея когда прибор выключен (без цифр)

2) из всех последующих изображений вычитаем изображение фона

3) после этого бинаризация и дальнейшее распознавание

Вроде реализуемо вполне.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если расширение базы не поможет то можно пробовать svm или простенькую нейросеть

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо всем за помощ! Я дописал свою программку, теперь работа стала еще скучнее)))

Вот результат работы:

 

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Супер :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мое распознавание цифр. Распознавание цифр и определение координат X, Y камеры поворотной. Выкладываю программу.

 

ThermalImagingXY.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×