iskees 32 Жалоба Опубликовано March 20, 2016 1. есть Sum называется. 2 Умножите (на скаляр) изображение на 1/255 и получите нужные вам 0 и 1, правда проще сумму разделить на 255, результат будет один. Чисто "черного или белого" формата в opencv нет. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dvoetut 2 Жалоба Опубликовано March 21, 2016 Я попробовал изучить пример кода, для работы с функциями 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 не нашел. Буду признателен за помощь!! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
iskees 32 Жалоба Опубликовано March 21, 2016 The functions sum calculate and return the sum of array elements, independently for each channel. Эта функция выдает скаляр состоящий из сумм для каждого канала, у вас изображение одноканальное и вам нужно использовать только первое знание, и делите на 255 уже его а не весь скаляр. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dvoetut 2 Жалоба Опубликовано March 21, 2016 Спасибо! разобрался! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dvoetut 2 Жалоба Опубликовано March 28, 2016 Я поигрался с bitwise_xor. Я использовал эту функцию для распознавания цифр на дисплее прибора. Срабатывает не всегда удачно. Я предварительно записывал шаблоны цифр а потом с ними сравнивал изображение с дисплея прибора. Возник вопрос: для повышения стабильности распознавания можно увеличить библиотеку шаблонов, или пойти по пути обучения каскадов харра? Мне кажется для простого распознавания показания прибора достаточно расширить библиотеку шаблонов. Кто уже сталкивался с такими задачками? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
iskees 32 Жалоба Опубликовано March 28, 2016 Каскады тут явно излишне, ошибки в сегментации символов или в их распознавании? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dvoetut 2 Жалоба Опубликовано March 29, 2016 Ошибки в распознавании. Скажем из 10 изображений 3-5 ошибочные. На картинке конечно все распознано верно, но ошибки возникают. Я долго думал и пришел к выводу, что нужно расширить библиотеку шаблонов Как я понял мешают блики на экране, но это можно решить либо программно либо созданием какого-то внешнего короба. Кстати если говорить про блики. Будет ли работать такой алгоритм: 1) запоминаем изображение дисплея когда прибор выключен (без цифр) 2) из всех последующих изображений вычитаем изображение фона 3) после этого бинаризация и дальнейшее распознавание Вроде реализуемо вполне. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
iskees 32 Жалоба Опубликовано March 29, 2016 Если расширение базы не поможет то можно пробовать svm или простенькую нейросеть Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 29, 2016 Вот здесь была простенькая сетка как раз для распознавания символов. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dvoetut 2 Жалоба Опубликовано March 29, 2016 Спасибо, попробую!!!! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dvoetut 2 Жалоба Опубликовано August 13, 2016 Спасибо всем за помощ! Я дописал свою программку, теперь работа стала еще скучнее))) Вот результат работы: 2 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 13, 2016 Супер Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Король 7 Жалоба Опубликовано October 25, 2016 Мое распознавание цифр. Распознавание цифр и определение координат X, Y камеры поворотной. Выкладываю программу. ThermalImagingXY.zip Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах