Класс перестает работать, когда определяется как глобальный

Я пишу программу, которая использует данные камеры с камеры PSEye с использованием драйверов Code Laboratories (http://www.codelaboratories.com/products/eye). Поэтому я создал заголовочный файл с именем PSEyeGetter.h для непосредственного взаимодействия с драйверами. Когда я использую этот класс в качестве локальной переменной в такой функции (обратите внимание, я использую OpenCV для отображения изображения):

    void Test2()
{
cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);
PSEyeGetter Get = PSEyeGetter(CLEYE_MONO_PROCESSED, CLEYE_VGA, 30);

IplImage* img_cam =  cvCreateImage(cvSize(Get.W, Get.H), 8, Get.Size);

while (1)
{
if (Get.GetFrame())
{
int Length = Get.W * Get.H * Get.Size;
for (int cnt = 0; cnt < Length; cnt++)
{
img_cam->imageData[cnt] = Get.CurrentColours[cnt];
}
}
cvShowImage("Image", img_cam);

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

cvReleaseImage(&img_cam);
cvDestroyAllWindows();
}

У меня нет проблем, изображение отображается отлично. Но когда я пытаюсь определить PSEyeGetter глобальную переменную, как это:

    PSEyeGetter Cam;
IplImage* img_cam;

void OpenCam()
{
Cam = PSEyeGetter(CLEYE_MONO_PROCESSED, CLEYE_VGA, 30);
img_cam =  cvCreateImage(cvSize(640, 480), 8, 1);
cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);
}

void GetImage()
{
while (1)
{
if (Cam.GetFrame())
{
int Length = Cam.W * Cam.H * Cam.Size;
for (int cnt = 0; cnt < Length; cnt++)
{
Image->imageData[cnt] = Cam.CurrentColours[cnt];
}

cvShowImage("Image", img_cam);

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

cvReleaseImage(&img_cam);
cvDestroyAllWindows();
}

Внезапно перестает правильно получать изображение. Он связывается с камерой и получает изображение, но изображение просто синее. Есть идеи, почему это может быть?

Другие биты полезной информации
CurrentColours = (PBYTE)malloc(W * H* Size * sizeof(byte)); где PBYTE определяется как (байт *). Он определяется при создании PSEyeGetter и освобождается только после уничтожения класса.

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

Спасибо за любую помощь. 🙂

Редактировать: Конструктор для PSEyeGetter

    PSEyeGetter::PSEyeGetter(CLEyeCameraColorMode ColourMode, CLEyeCameraResolution Resolution, float FrameRate)
{
IsReady = false;
Mode = ColourMode;
Res = Resolution;
Rate = FrameRate;
switch(Mode)
{
case CLEYE_MONO_PROCESSED:
Size = 1;
break;
case CLEYE_COLOR_PROCESSED:
Size = 4;
break;
case CLEYE_MONO_RAW:
Size = 1;
break;
case CLEYE_COLOR_RAW:
Size = 4;
break;
case CLEYE_BAYER_RAW:
Size = 1;
break;
}
if (!FindCam()) return;
CurrentColours = (PBYTE)malloc(W * H* Size * sizeof(byte));
}

bool PSEyeGetter::FindCam()
{
if (IsReady)
{
CLEyeCameraStop(Cam);
CLEyeDestroyCamera(Cam);
IsReady = false;
}

if (CLEyeGetCameraCount() == 1)
{
guid = CLEyeGetCameraUUID(0);
Cam = CLEyeCreateCamera(guid, Mode, Res, Rate);
CLEyeCameraGetFrameDimensions(Cam, W, H);
IsReady = true;
CLEyeCameraStart(Cam);
CLEyeCameraLED(Cam, true);
}
else
{
IsReady = false;
}

return IsReady;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector