最近在做物体的位姿识别程序,也看了许多的相关论文。但仅仅是看并不能有什么掌握,发现opencv中就有对linemod的实现。准备先把该方法看一遍,具体的实现过程日后再说,先看看是如何使用的。
openCV中的应用例子
应用起来其实重要的也就这几句
// LINEMOD 探测子的初始化(可以读取已有模型,或者空模型)
cv::Ptr<cv::linemod::Detector> detector; // linemod探测子初始化
// detector可以通过读取 yml,xml文件读取
detector = readLinemod(fileName); //absPath + 'name.yml"
static cv::Ptr<cv::linemod::Detector> readLinemod(const std::string& filename)
{
cv::Ptr<cv::linemod::Detector> detector = cv::makePtr<cv::linemod::Detector>();
cv::FileStorage fs(filename, cv::FileStorage::READ);
detector->read(fs.root());
cv::FileNode fn = fs["classes"];
for (cv::FileNodeIterator i = fn.begin(), iend = fn.end(); i != iend; ++i)
detector->readClass(*i);
return detector;
}
// detector也可以为空
detector = cv::linemod::getDefaultLINEMOD();
学习模板的时候,需要输入对应的彩色数据和深度图像数据。但是有没有对齐并没有详述,所给例子中,是用 openni 接口直接调用kinect获取一组 rgbd数据,由于并没有kinect v1,所以就没得搞。我认为应该输入对齐了的 rgbd数据。