मैं हाल ही में OpenCV 3.0 के साथ काम शुरू कर दिया है और मेरा लक्ष्य स्टीरियो कैमरों का एक सेट से स्टीरियो छवियों की एक जोड़ी पर कब्जा करने की है, बनाने के स्टीरियो छवियों की एक जोड़ी की एक वैध बिंदु बादल प्रतिनिधित्व उत्पन्न करने के लिए एक उचित असमानता नक्शे, एक 3 डी बिंदु बादल को असमानता नक्शा बदलने और अंत में पीसीएल का उपयोग कर एक बिंदु बादल दर्शक में जिसके परिणामस्वरूप बिंदु बादल दिखाते हैं।कैसे OpenCV 3.0 का उपयोग कर StereoSGBM और पीसीएल
मैं पहले से ही कैमरा अंशांकन प्रदर्शन किया है और जिसके परिणामस्वरूप अंशांकन आरएमएस 0.4
है आप मेरी छवि जोड़े (बाएं छवि) 1 और (सही छवि) नीचे दिए गए लिंक में 2 पा सकते हैं। मैं असमानता छवि बनाने के लिए स्टीरियोएसबीबीएम का उपयोग कर रहा हूं। मैं बेहतर असमानता छवि प्राप्त करने के लिए स्टीरियोएसबीबीएम फ़ंक्शन पैरामीटर समायोजित करने के लिए ट्रैक-बार का भी उपयोग कर रहा हूं। दुर्भाग्य से मैं अपनी असमानता छवि पोस्ट नहीं कर सकता क्योंकि मैं स्टैक ओवरफ्लो में नया हूं और दो से अधिक छवि लिंक पोस्ट करने के लिए पर्याप्त प्रतिष्ठा नहीं है!
असमानता छवि (नीचे दिए गए कोड में "disp") प्राप्त करने के बाद, मैं असमानता छवि जानकारी XYZ 3 डी समन्वय में परिवर्तित करने के लिए reprojectImageTo3D() फ़ंक्शन का उपयोग करता हूं, और फिर मैं परिणामों को "pcl: : PointXYZRGB "अंक ताकि वे पीसीएल पॉइंट क्लाउड व्यूअर में दिखाए जा सकें। आवश्यक रूपांतरण करने के बाद, मुझे पॉइंट क्लाउड के रूप में जो मिलता है वह एक मूर्ख पिरामिड आकार बिंदु-बादल है जो कोई समझ नहीं लेता है। मैंने पहले से ही निम्नलिखित लिंक में सुझाए गए सभी तरीकों को पढ़ लिया है और कोशिश की है:
1- http: //blog.martinperis.com/2012/01/3d-reconstruction-with-opencv-and-point.html
2- http: //stackoverflow.com/questions/13463476/opencv-stereorectifyuncalibrated-to-3d-point-cloud
3- http: //stackoverflow.com/questions/22418846/reprojectimageto3d-in- opencv
और उनमें से गैर काम किया !!!
नीचे मैं अपने कोड के रूपांतरण भाग प्रदान की है, यह बहुत सराहना की जाएगी क्या आप मुझे बता सकता है अगर मैं क्या याद आ रही है: कुछ काम और कुछ शोध मैंने पाया मेरा उत्तर और मैं कर रहा हूँ करने के बाद
pcl::PointCloud<pcl::PointXYZRGB>::Ptr pointcloud(new pcl::PointCloud<pcl::PointXYZRGB>());
Mat xyz;
reprojectImageTo3D(disp, xyz, Q, false, CV_32F);
pointcloud->width = static_cast<uint32_t>(disp.cols);
pointcloud->height = static_cast<uint32_t>(disp.rows);
pointcloud->is_dense = false;
pcl::PointXYZRGB point;
for (int i = 0; i < disp.rows; ++i)
{
uchar* rgb_ptr = Frame_RGBRight.ptr<uchar>(i);
uchar* disp_ptr = disp.ptr<uchar>(i);
double* xyz_ptr = xyz.ptr<double>(i);
for (int j = 0; j < disp.cols; ++j)
{
uchar d = disp_ptr[j];
if (d == 0) continue;
Point3f p = xyz.at<Point3f>(i, j);
point.z = p.z; // I have also tried p.z/16
point.x = p.x;
point.y = p.y;
point.b = rgb_ptr[3 * j];
point.g = rgb_ptr[3 * j + 1];
point.r = rgb_ptr[3 * j + 2];
pointcloud->points.push_back(point);
}
}
viewer.showCloud(pointcloud);
कृपया आपके द्वारा प्रदान की गई छवियों की जांच करें, वे वही – alexisrozhkov
क्षमा करें, मेरा बुरा। मैंने सही फ्रेम अपलोड किए हैं! –