У меня проблемы с получением изображения с камеры на 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);
}
Извините за все части «кода здесь, чтобы сделать это», я вручную набираю код.
Итак, кто-нибудь может заявить, что может быть проблема в любой из этих частей? Там нет ошибки, я просто получаю запутанные изображения, которые, как я могу заметить, являются изображениями, просто неправильно сложенными или не полными изображениями.
Кому-либо нужна дополнительная информация, просто спросите или больше кода, я его выложу. Приветствия.
Попробуйте преобразовать кадры из YUV в RGB. http://en.wikipedia.org/wiki/YUV показывает, как данные в формате YUV преобразуются в RGB. Вы также можете найти готовый код для этого. Проверьте формат вывода данных YUV с вашей камеры и используйте правильное преобразование.