Хотел-бы поделиться функцией преобразования IplImage в QImage:

// Эта функция копирует IplImage 8бит, 3 канала в Qt QImage
// не выделяет новый размер для входного QImage
// Для неё нужно создать входной QImage нужного размера
int IplCopyToQImage(IplImage *img,QImage &qimg)
{
     if (!img) return 1;
     int minw = std::min(img->width,qimg.width());
     int minh = std::min(img->height,qimg.height());
     if (minw == 0 || minh == 0) return 2;
 
     for (int y = 0;y < minh;y++)
     {
          uchar *ptr = (uchar*)(img->imageData + y*img->widthStep);
          QRgb *ptrDst = (QRgb*)(qimg.scanLine(y));
 
          for (int x = 0;x<minw ;x++)
          {
               int b = ptr[3*x];
               int g = ptr[3*x+1];
               int r = ptr[3*x+2];
               *ptrDst=qRgb(r,g,b);// opt:: using scanline here
               ptrDst++;
          };
     };
 
     return 0;
}
 
// Эта функция сама пересоздаст нужных размеров QImage
int IplToQImage(IplImage *img,QImage &qimg)
{
     if (img == 0) return 1;
 
     int w = img->width;
     int h = img->height;
 
     qimg = QImage(img->width,img->height,QImage::Format_RGB32);
 
     return 1+IplCopyToQImage(img,qimg);
}

Continue reading »

 

В данной статье будет рассмотрена попытка установить OpenCV 2.2 с поддержкой IPP 6.1 update 6 на Ubuntu 10.

Все приводимые здесь действия производились на виртуальной машине работающей по Virtual box 4.0.4 со свежей установленной Ubuntu 10.

Подготавливаем среду для компиляции, устанавливаем все необходимые библиотеки и программы:

sudo -s
apt-get install build-essential cmake pkg-config libpng12-0 libpng12-dev libpng3
apt-get install libpnglite-dev libpngwriter0-dev libpngwriter0c2 zlib1g-dbg zlib1g zlib1g-dev
apt-get install libjasper-dev libjasper-runtime libjasper1
apt-get install pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools
apt-get install libjpeg62 libjpeg62-dev libjpeg62-dbg libjpeg-progs
apt-get install ffmpeg libavcodec-dev libavcodec52 libavformat52 libavformat-dev
apt-get install libgstreamer0.10-0-dbg libgstreamer0.10-0  libgstreamer0.10-dev
apt-get install libxine1-ffmpeg  libxine-dev libxine1-bin
apt-get install libunicap2 libunicap2-dev libgstreamermm-0.10-dev
apt-get install libdc1394-22-dev libdc1394-22 libdc1394-utils libraw1394-11 libraw1394-dev
apt-get install swig libv4l-0 libv4l-dev python-numpy doxygen
apt-get install libgtk2.0-dev libtbb2 libtbb-dev libswscale-dev
exit

Continue reading »

 

Сегодня начнем наше знакомство с одной из простых программ написанных с использованием библиотеки OpenCV.

Пример выводит изображение с видеокамеры.

#include <stdlib.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>

using namespace cv;

int main(int argc, char** argv) {
 Mat frame;
 VideoCapture cap(0);
 namedWindow("Video", 1);
 while(true)
 {
 cap >> frame;
 imshow("Video", frame);
 if (waitKey(33) >= 0) break;
 }

return (EXIT_SUCCESS);
}
 

Скачиваем отсюда: cppref.qch и libstdc++-v3.qch.

Копируем куда-нибудь, затем идем в Tools -> Options -> Help, на вкладке Documentation делаем Add.

Если сразу не заработает, применяем старый трюк: удаляем все доки из той же вкладки, идем на вкладку Filters, удаляем все фильтры, перезагружаем Qt Creator. Снова дабавляем новые доки в Help.

Кстати, контекстный поиск по F1 работает в справке по STL, но не в справке по C++. Index и Content работают и там и там.

 

Эта статья содержит дословный перевод комментария к программе HClient — пример (hclient.htm) работы с устройствами USB HID, который можно найти в Windows DDK (см. папку c:\WINDDK2003\3790.1830\src\wdm\hid\hclient). HClient представляет из себя, кроме примера, полезную программу, дающую информацию обо всех подключенных в системе устройствах USB HID.

Этот документ и связанный с ним код примера показывает, как написать приложение-клиент пользовательского режима (user-mode client application), предназначенное для обмена данными с устройствами, которые отвечают спецификации HID device class. Эта статья полезна для программистов, кому нужно разработать приложение пользовательского режима, которое работает с HID-совместимыми устройствами, получает и декодирует информацию от них. Этот пример иллюстрирует метод детектирования устройств HID, открытие этих устройств HID для обмена, и распаковку данных из репортов или форматирование данных в репорты устройства HID.

Continue reading »

 

1. Тип int является 32-разрядным (4 байта), short — 16-разрядным (2 байта).

2. Порядок байт в слове — сначала идет младший байт, потом старший. Точно так же, как и у AVR gcc.

3. По умолчанию в структурах включено выравнивание переменных структуры на 2 байта. При этом в блоках памяти получаются «дырки», которые могут доставить неудобство в смысле несовместимости с платформами, где выравнивание отсутствует. Чтобы отключить выравнивание, нужно применить ключевое слово __attribute__ для переменных, размер типа которых больше байта, например:

typedef struct{
   uchar AA;                             //размер переменной 1 байт
   uint16_t LightLevelOn __attribute__ ((packed));  //размер 2 байта, отключаем выравнивание
   uint16_t LightLevelOff __attribute__ ((packed)); //2 байта, отключаем выравнивание
   uchar IntLight;              //1 байт
   uchar MotionDetect;       //1 байт
   uchar LightTime;            //1 байт
   uchar RiseStep;             //1 байт
   uchar FallStep;              //1 байт
   uchar AdcGain;              //1 байт
   uint16_t CRC __attribute__ ((packed));           //2 байта, отключаем выравнивание
} tParams;
 

Last month, I examined some common alternatives for representing and manipulating memory-mapped devices in C.1 The techniques I presented work as well (or as badly) in C++. However, classes in C++ offer a better alternative than anything you can do in C. This month, I'll explain why.

Picking up where I left off

As I did last month, I'll use for my examples a machine with a variety of devices, including a programmable timer, which employs a small collection of device registers. The timer registers start at location 0xFFFF6000.

For simplicity, I assume that every device register is a four-byte word aligned to an address that's a multiple of four, so that you can manipulate each device register as an unsigned int or, equivalently, as a uint32_t. Since device registers are volatile entities, I typically bundle the volatile qualifier with the appropriate integer type within a typedef definition, as in:

typedef uint32_t volatile device_register;

Continue reading »

 

По ряду причин было решено отказаться от «интеллектуальных инсталляторов» MinGW32 и MSYS.

Установить их «вручную» не составляет большого труда.

Установка.

Отсюда загружаем необходимые нам файлы:

На момент написания статьи, 07 сентября 2010, были использованы приведенные ниже ссылки на архивы и пакеты. Continue reading »

 

Copy article from this.

So I’ve successfully compiled and built the QT framework on my Windows Laptop using MinGW C/C++ compiler and installed QT Creator 0.9 alpha as my IDE. I originally got complimation working with Eclipse but opted for QT Creator as it looks handy since it made especially for QT.

I am not going to go straight into coding without designing my program first, what is needed etc so I decided I’d be best working out how to do serial I/O. Serial I/O is very simple on Linux since everything on Linux is a file! /dev/ttySxx is usually the file associated with the serial charactor device. But this is no good on my Windows PC so I searched for a POSIX based Serial I/O class or library. Luckly a POSIX library for Serial Comm was developed for QT. The project is located at http://qextserialport.sourceforge.net/. I downloaded version 1.1 to see how easy it would be to do serial communication. Continue reading »

 

У меня модель по умолчанию возвращает дату в формате «M/d/yy», а хотелось бы «dd.MM.yyyy».

Для отображения даты можно использовать следующий наследный класс:

QCustomSqlTableModel::QCustomSqlTableModel(QObject *parent)
    : QSqlTableModel(parent)
{
}

QVariant QCustomSqlTableModel::data(const QModelIndex &index, int role) const
{
    QVariant value = QSqlTableModel::data(index, role);
    if (value.isValid() && role == Qt::DisplayRole) {
        QDate dat=value.toDate();
        if(dat.isValid())
            return value.toDate().toString("dd.MM.yyyy");
    }

    return value;
}

Если это можно сделать иначе, то посоветуйте.

© 2011 ADTL Blog Suffusion theme by Sayontan Sinha