Выделение контура лица после детектирования

Встроенные возможности OpenCV позволяют детектировать лицо, но при распознавании лиц может потребоваться более точное определение его границ. Метод выделения границ лица описан в проекте «Face detection and swap». Там расставлялись точки, называемые «щупами», которые сдвигались к лицу, пока не находился подходящий цвет лица, и движение не останавливалось. Расстановка «щупов» выглядела так:

Однако в данном примере у нас фон лица темный, что значительно облегчает задачу. Мы рассмотрим примеры с более недружелюбным фоном:



( Читать дальше )

Создание контура из точек

Однажды мне понадобилось создать контур из точек, но к сожалению обычно добавление к последовательности cvSeqPush здесь не сработало. После некоторого использования Google решение было найдено, привожу его, дабы другие не тратили время на подобные вещи:
CvPoint * Points;  
Points = new CvPoint[<Количество элементов>]; 
...Заполнение точек
CvContour contour;   
CvSeqBlock contour_block;  
cvMakeSeqHeaderForArray(CV_SEQ_POLYGON, sizeof(CvContour),sizeof(CvPoint),
                        Points, <Количество элементов>, (CvSeq*)&contour, &contour_block); 
CvSeq* seq = (CvSeq*)&contour;

После это с seq можно работать как с обычным контуром.

Новый тип оптических маркеров Aztec Marker

Использование оптических маркеров для трекинга не является чем-то новым, и на настоящий момент существует ряд разработок в этой области. Наиболее известные технологии – это ARToolKit и ARTag. Однако у данных технологий есть определенные недостатки, например обязательное отсутствие шума по краям. У многих разработчиков возникала идея: «а может использовать в качестве маркеров хорошо детектируемые и хорошо зарекомендовавшие себя коды, ну, например, QR Code или Aztec (Small Aztec) Code». Пример такого маркера получил название Aztec Marker, о его структуре подробнее можно почитать здесь.
Там же вы можете скачать исходный код для кодирования и декодирования маркеров.


( Читать дальше )

Бесплатная библиотека для кодирования кодов DataMatrix

Бесплатную библиотеку для кодирования кодов DataMatrix в ОС Windows можно скачать здесь: http://intbusoft.com/download/products/DataMatrixEncodeSDK.zip
Пользоваться ей очень просто. Динамически подключаем к программе и распространяем (БЕСПЛАТНО) со своим программным продуктом.
Пример использования функции:
long s=10000000;
BYTE* out_bitmap=new BYTE[s];
lstrcpy(buf,"Hello World!!! And 1234567890");
if (EncodeDataMatrix(buf,strlen(buf),out_bitmap,&s,4,0,5,0)!=0)
{
    printf("Encoding error!");
    delete out_bitmap;
    return 5;
}



( Читать дальше )

Вырезка части кода OpenCV для вставки в свой проект

Поскольку лицензией OpenCV является BSD, то мы можем делать с ней все, что захотим. Например, вырезать из неё какие-то части, чтобы вставлять в свой проект. Конечно, кто-то пытается сделать собственные библиотеки (этого не избежал и я – библиотека ImagePak), это помогает разобраться в предмете, но зачем изобретать велосипед и многие функции, которые на высоком уровне качества и быстродействия реализованы в свободно распространяемой библиотеке. Поставим задачу: необходимо использовать OpenCV-шные функции по переводу изображения в монохромное в своем проекте для Windows. На самом деле наверняка понадобится значительно больше, но не в этом вопрос. Я буду использовать версию 2.2 (просто лень ставить новую). Нам понадобятся поддержка модулей core и imgproc. Не долго думая, создаем папку opencv_ и копируем туда полностью эти модули. Создаем обычный консольный проект в VisualStudio и подключаем туда все файлы из этих модулей. Создаем main.cpp, в котором кроме функции main() ничего нет. Перед тем как пытаться скомпилировать перепишем пути include в файлах precomp.hpp обоих модулей и в других модулях, где происходит обращение к *.h файлам, чтобы мы уж точно с нашими файлами работали. Например, следующим образом:

#include "opencv_/modules/imgproc/include/opencv2/imgproc/imgproc.hpp"
#include "opencv_/modules/imgproc/include/opencv2/imgproc/imgproc_c.h"
#include "opencv_/modules/core/include/opencv2/core/internal.hpp"


( Читать дальше )

cvDecodeImage

Предположим у вас есть загруженный в память каким-то образом графический файл, например, формата JPEG. И вам его надо открыть в OpenCV, однако документирована только функция cvLoadImage, которая позволяет загружать из файла. Можно конечно создать файл в памяти, но это не нужно, поскольку в OpenCV есть полезная недокументированная функция cvDecodeImage. На ряде Интернет-ресурсов, в том числе и на русских, уже есть достаточно давно описание использования этой функции, но я решил привести здесь пример использования этой функции, поскольку мне например не сразу стало понятно, как ее использовать и безопасно ли делать это, раз она недокументирована.

IplImage* cvDecodeImage( const CvMat* _buf, int iscolor );

Формат такой же, как у cvLoadImage, за исключением того, что передается не имя файла, а указатель на данные в памяти. Однако перед тем, как использовать данную функцию я решил посмотреть ее в исходниках.


( Читать дальше )

VidikonReader 1.11

Новая версия доступна для скачивания. Добавлена консоль.


Перейти к странице загрузки

Определение неправомерной вставки дополнительных кадров в видеопоток

Предположим, вы разрабатываете какую-нибудь технологию обработки видео информации, поступающей с видеокамеры в реальном времени. Технология готова, но как защитить ее? Вы хотите, чтобы пользователь мог выбрать варианты покупки вашего SDK для одной камеры, двух, трех и т.д. Конечно, нет проблем, если взаимодействие с видео вы встраиваете в SDK, но если такой возможности нет? В таком случае можно анализировать последовательность кадров, чтобы определить, принадлежат ли кадры текущему видеопотоку или нет. Данную возможность можно реализовать, используя реализованную в OpenCV технологию отличий. При реализации примера будем иметь в виду, что камера неподвижна и однонаправлена.
Поскольку неизвестно, как будет подделываться видеопоток (после каждого кадра или после последовательности кадров), то нельзя заниматься сравнением только последовательных кадров. Но можно чередовать сравнения, например один кадр – сравниваем с предыдущем, второй – с 5 кадром перед этим и т.п. После нахождения отличий можно посчитать процент измененного изображения и суммировать результат в единицу времени.


( Читать дальше )

Resize Images Online

Совершенно случайно обнаружил, что популярны некоторые сервисы по изменению размеров изображения. Например,
http://resizeyourimage.com/
http://www.shrinkpictures.com/

По-быстрому сделал онлайн функцию, которая реализует такую возможность. Конечно сам сервис простой, но если будем пользоваться успехом, то можно добавить такие функции.

http://intelligenthelper.com/online/resizeimage/



( Читать дальше )