所以我正在与opencv合作,在图像中找到一个对象。我有场景图像和对象图像,我可以通过模板匹配来检测对象,但我需要给出一个旋转公差,这在模板匹配中是不可用的。我将使用特征2D来检测具有findhomography和decomposithomographic的特征,这样我就可以获得平移和旋转,但我想要为了理解如何找到分解单应性参数K–输入的固有相机校准矩阵。感谢
我找到了解决方案,所以我会发布它首先需要使用特征描述算法,我选择使用SURF算法在找到物体和场景关键点后,你需要用findhomography找到单应矩阵,然后你可以使用这个代码计算角度
float a = homography.at<double>(0, 0);
float b = homography.at<double>(0, 1);
float theta = atan2(b, a) * (180 / M_PI);
cout << theta;
对于找到单应矩阵后的平移,你可以找到物体在图像中的位置,并将初始位置与找到的位置进行比较
std::vector<Point2f> obj_corners(4);
//-- Get the corners from the image_1 ( the object to be "detected" )
obj_corners[0] = Point2f(0, 0);
obj_corners[1] = Point2f((float)patch.cols, 0);
obj_corners[2] = Point2f((float)patch.cols, (float)patch.rows);
obj_corners[3] = Point2f(0, (float)patch.rows);
std::vector<Point2f> scene_corners(4);
//it will return the scene_corners
//these corners are the location of the patch in the master
perspectiveTransform(obj_corners, scene_corners, homography);
场景角包含图像中对象的协调