Я пытаюсь подключить Panasonic D-Imager, чтобы открыть резюме - PullRequest
1 голос
/ 11 марта 2011

Я новичок в OpenCV и пытаюсь показать на экране 3d-камеру "panasonic d-imager" с помощью OpenCV.Пока безуспешно.

Я получаю DLL-файл, который содержит следующие функции

// This function connects the personal computer to the 3D Image Sensor, and sets up the system to acquire images from the sensor.
InitImageDriver(); 

//This function obtains the image data from the camera via the USB driver, and copies the range image data and grayscale image data to the area given by the argument. kdat and ndat=Pointer of the range and grayscale image data acquiring buffer.Always secure the range image storage area using the application program. The size of the range image data storage area should be: 160’ 120 ‘2 = 38400 bytes.    
int WINAPI GetImageKN(unsigned short *kdat ,unsigned short *ndat);

Теперь я просто хочу показать два выхода камеры на экране (цветной и в оттенках серого).Я написал этот код:

#include
#include
#include "Dimagerdll.h" //the hader file

#pragma comment(lib,"Dimagerdll.lib") // the lib file of dll
using namespace std;

int main(int argc, char *argv[])
{
    IplImage *img;
    unsigned short *r= new  unsigned short[38400];
    unsigned short  *t= new  unsigned short[38400];

    InitImageDriver(); //dll function
    GetImageKN(r,t); //dll function

    cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);//create a window to display the images
    cvMoveWindow("mainWin", 5, 5);// position the window

    while(1)
    {
        img=cvQueryFrame(r);// retrieve the captured frame-but here is the problem! r is unsigned short so it cant compile!!!!!
        cvShowImage("mainWin", img );// show the image in the window

        c=cvWaitKey(10);
        if(c == 27)
        break;
    }

    FreeImageDriver();//dll function
    return 0;
}

Очевидно, что я не могу использовать cvQueryFrame, потому что данные с камеры не IplImage.

Может кто-нибудь сказать мне, что еще янужно сделать ???

спасибо

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

Вы правы, вы не можете использовать cvQueryFrame, который предназначен для камер, которые имеют специальные драйверы веб-камеры.Итак, похоже, что вы понимаете API для взаимодействия с камерой и извлечения данных из нее;все, что осталось сделать, - это преобразовать эти данные в IplImage, выполнить некоторую обработку, если хотите, отобразить изображение, если хотите, и циклически просмотреть кадры, которые вы получаете с желаемой частотой кадров.

Итак, изображения, которые вы получаете, они закодированы (например, в формате JPEG), или вы получаете значения пикселей (0-255, если 8 бит).Если данные изображения закодированы, вы должны будете знать, какой тип кодирования используется, и декодировать, используя тип библиотеки.Например, LibJPEG Turbo - это то, что я использую для декодирования данных JPEG с камер Nikon и Canon.

Предполагая, что вы расшифровали изображение, или изображение не закодировано, вам необходимо знать некоторые подробности об изображении.Высота и ширина в пикселях, глубина в битах (обычно 8 бит на пиксель) и количество каналов (3 для цвета RGB, 1 для оттенков серого).

Предположим, что размер изображения составляет 8 бит напиксель, имеет высоту h, ширину w и шкалу серого.

Начните с выделения памяти для нового изображения IplImage * frame = cvCreateImage (cvSize (w, h), 8, 1);

Затем в вашем цикле:

while(getImages) {

 // obtain 1-D array of Row-Wise 8 bit pixel values from camera API and decoding if necessary
 frame->imageData = pointer to pixel values

 // process if you want
 // display if you want

}

cvReleaseImage(&frame)

Убедитесь, что вы не перераспределяете память на каждой итерации цикла, просто сделайте это один раз, и будьте внимательны и освобождайте кадр до завершения программы

1 голос
/ 11 марта 2011

В дополнение к отличному ответу rossb83 - если вы получаете данные с оттенками серого с камеры, вам придется преобразовать их в 8UC3 (8-битный трехканальный), чтобы отобразить их с помощью showWindow.Посмотрите cvtColor или просто сделайте это сами с доступом к необработанным пикселям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...