Tôi đang làm việc với bộ cảm biến Kinect và tôi đang cố gắng căn chỉnh chiều sâu và khung màu để tôi có thể lưu chúng dưới dạng hình ảnh "vừa khít" vào nhau. Tôi đã dành rất nhiều thời gian đi qua các diễn đàn msdn và tài liệu khiêm tốn của Kinect SDK và tôi hoàn toàn không có nơi nào.Kinect SDK: sắp xếp chiều sâu và khung màu
Dựa trên câu trả lời này: Kinect: Converting from RGB Coordinates to Depth Coordinates
Tôi đã hàm sau, nơi depthData
và colorData
thu được từ NUI_LOCKED_RECT.pBits
và mappedData
là sản phẩm có chứa khung màu mới, ánh xạ tới chiều sâu phối:
bool mapColorFrameToDepthFrame(unsigned char *depthData, unsigned char* colorData, unsigned char* mappedData)
{
INuiCoordinateMapper* coordMapper;
// Get coordinate mapper
m_pSensor->NuiGetCoordinateMapper(&coordMapper);
NUI_DEPTH_IMAGE_POINT* depthPoints = new NUI_DEPTH_IMAGE_POINT[640 * 480];
HRESULT result = coordMapper->MapColorFrameToDepthFrame(NUI_IMAGE_TYPE_COLOR, NUI_IMAGE_RESOLUTION_640x480, NUI_IMAGE_RESOLUTION_640x480, 640 * 480, reinterpret_cast<NUI_DEPTH_IMAGE_PIXEL*>(depthData), 640 * 480, depthPoints);
if (FAILED(result))
{
return false;
}
int pos = 0;
int* colorRun = reinterpret_cast<int*>(colorData);
int* mappedRun = reinterpret_cast<int*>(mappedData);
// For each pixel of new color frame
for (int i = 0; i < 640 * 480; ++i)
{
// Find the corresponding pixel in original color frame from depthPoints
pos = (depthPoints[i].y * 640) + depthPoints[i].x;
// Set pixel value if it's within frame boundaries
if (pos < 640 * 480)
{
mappedRun[i] = colorRun[pos];
}
}
return true;
}
Tất cả những gì tôi nhận được khi chạy mã này là một khung màu không đổi với tất cả các pixel bị xóa (trắng), trong đó depthFrame không có thông tin.
Bạn đã kiểm tra ra màn hình xanh ví dụ trong Kinect cho Windows mã hóa ví dụ? http://kinectforwindows.codeplex.com/. Nó sắp xếp màu sắc và chiều sâu. –
Vâng tôi có. Nó không sử dụng 'INuiCoordinateMapper' mới, nhưng một phương thức cũ hơn' INuiSensor :: NuiImageGetColorPixelCoordinateFrameFromDepthPixelFrameAtResolution'. Tôi đã thử nó và nó không làm việc cho tôi hoặc là (tôi nhận được tất cả hình ảnh màu trắng). Bằng cách nào đó mảng giá trị độ sâu mà họ nhận được là USHORT (16 bit) và của tôi là 32 bit, với lý do có thể là tôi khởi tạo cảm biến Kinect của mình với các thông số khác nhau (độ sâu chỉ không có chỉ mục người chơi). Ngay cả khi tôi tạo ra một mảng các giá trị độ sâu 16 bit từ bit 32 bit thì hàm này không hoạt động đối với tôi. – jaho
điều tương tự đã được giải quyết ở đây: http://stackoverflow.com/a/19905805/2521214 Kinect SDK có chức năng cho allign các hình ảnh nhưng họ đã không làm việc cho tôi ở tất cả (có một phiên bản rất cũ của kinect) vì vậy tôi đã làm nó bản thân mình ... trong liên kết đó là dữ liệu hiệu chỉnh kinect của tôi cho bạn, bạn phải tự đo nó là – Spektre