Возможная проблема SDL_Net и использование openCV для отображения кадра камеры YUV из памяти

У меня проблемы с получением изображения с камеры на Raspberry Pi по сети и на Pandaboard (работает Ubuntu 12.04) для правильного отображения. Данные, которые я получаю с камеры, представляют собой необработанные данные YUV с разрешением 1280×720.

Я думаю, что мои вызовы SDL в порядке, но вот код отправки. Любой не стесняется указать, могут ли они увидеть что-то явно не так.

void Client::SendData(const void* buffer, int bufflen)
{
/*
Some code to check if connected to server and if socket is not null
*/if(SDLNet_TCP_Send(clientSocket, buffer, bufflen) < bufflen)
{
std::cerr << "SDLNet_TCP_Send: " << SDLNet_GetError() << std::endl;
return;
}
}

Теперь получим код

void Server::ReceiveDataFromClient()
{
/*
code to check if data is being sent
*/
//1382400 is the size of the image in bytes, before it is sent. This data
//is in bufflen in the send func and, to my knowledge, is correct.
if(SDLNet_TCP_Recv(clientSocket, buffer, 1382400) <=0)
{
std::cout << "Client disconnected" << std::endl;
/*Code to shut down socket and socketset.*/
}
else //client is sending data
{
//buffer is an int* at the moment, I have tried it as a uint8_t* and a char*
setUpOpenCVToDisplayChunk(buffer);
}
}

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

И наконец, мой код отображения openCv:

void Server::setUpOpenCVToDisplayChunk(int* data)
{
//I have tried different bit depths also
IplImage* yImageHeader = cvCreateImageHeader(cvSize(1280, 720), IPL_DEPTH_8U, 1);

//code to check yImage header is created correctly
cvSetData(yImageHeader, data, yImageHeader->widthStep);
cvNamedWindow("win1", CV_WINDOW_AUTOSIZE);
cvShowImage("win1", yImageHeader);
}

Извините за все части «кода здесь, чтобы сделать это», я вручную набираю код.

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

Кому-либо нужна дополнительная информация, просто спросите или больше кода, я его выложу. Приветствия.

0

Решение

Попробуйте преобразовать кадры из YUV в RGB. http://en.wikipedia.org/wiki/YUV показывает, как данные в формате YUV преобразуются в RGB. Вы также можете найти готовый код для этого. Проверьте формат вывода данных YUV с вашей камеры и используйте правильное преобразование.

0

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


По вопросам рекламы [email protected]