- Cập nhật 2-Tính khoảng cách (chênh lệch) OpenCV
Bài viết sau đây là thực sự hữu ích (mặc dù nó đang sử dụng Python thay vì C++) nếu bạn đang sử dụng một máy ảnh duy nhất để tính toán khoảng cách: Find distance from camera to object/marker using Python and OpenCV
Liên kết tốt nhất là Stereo Webcam Depth Detection. Việc thực hiện dự án nguồn mở này thực sự rõ ràng.
Dưới đây là câu hỏi ban đầu.
Đối với dự án của tôi, tôi đang sử dụng hai camera (tầm nhìn stereo) để theo dõi các đối tượng và tính khoảng cách. Tôi đã hiệu chỉnh chúng với mã mẫu của OpenCV và tạo ra một bản đồ chênh lệch.
Tôi đã triển khai phương pháp theo dõi các đối tượng dựa trên màu (điều này tạo ra hình ảnh ngưỡng).
Câu hỏi của tôi: Làm thế nào tôi có thể tính toán khoảng cách đến các đối tượng được theo dõi bằng cách sử dụng bản đồ chênh lệch/ma trận?
Dưới đây bạn có thể tìm thấy đoạn mã nhận tọa độ x, y và z của mỗi pixel. Câu hỏi: Is Point.z bằng cm, pixel, mm?
Tôi có thể lấy khoảng cách đến đối tượng được theo dõi bằng mã này không?
Cảm ơn bạn trước!
cvReprojectImageTo3D(disparity, Image3D, _Q);
vector<CvPoint3D32f> PointArray;
CvPoint3D32f Point;
for (int y = 0; y < Image3D->rows; y++) {
float *data = (float *)(Image3D->data.ptr + y * Image3D->step);
for (int x = 0; x < Image3D->cols * 3; x = x + 3)
{
Point.x = data[x];
Point.y = data[x+1];
Point.z = data[x+2];
PointArray.push_back(Point);
//Depth > 10
if(Point.z > 10)
{
printf("%f %f %f", Point.x, Point.y, Point.z);
}
}
}
cvReleaseMat(&Image3D);
- Cập nhật 1 -
Ví dụ tôi tạo ra hình ảnh ngưỡng này (của máy ảnh trái). Tôi gần như có cùng một camera đúng.
Bên cạnh những hình ảnh ngưỡng trên, ứng dụng sẽ tạo ra một bản đồ chênh lệch. Làm thế nào tôi có thể nhận được tọa độ Z của các điểm ảnh của bàn tay trong bản đồ disparity?
Tôi thực sự muốn lấy tất cả tọa độ Z của các điểm ảnh của bàn tay để tính giá trị Z trung bình (khoảng cách) (sử dụng bản đồ chênh lệch).
Xem --Cập nhật-- trong bài đăng đầu tiên. – Odrai