給定兩張圖片,其中一張是另一張旋轉後的結果,需利用 OpenCV 計算旋轉角度。
findHomography 或 estimateAffinePartial2D)獲取幾何變換矩陣並過濾外點。M = [R | t],旋轉角度 θ = atan2(M[1][0], M[0][0])(弧度制)。H,先分解得到旋轉分量。Mat img1 = imread("ref.jpg", 0), img2 = imread("rot.jpg", 0);
Ptr orb = ORB::create();
vector kp1, kp2;
Mat desc1, desc2;
orb->detectAndCompute(img1, noArray(), kp1, desc1);
orb->detectAndCompute(img2, noArray(), kp2, desc2);
BFMatcher matcher(NORM_HAMMING);
vector matches;
matcher.match(desc1, desc2, matches);
// 篩選優質匹配...
vector pts1, pts2;
for (auto& m : goodMatches) {
pts1.push_back(kp1[m.queryIdx].pt);
pts2.push_back(kp2[m.trainIdx].pt);
}
Mat H = findHomography(pts1, pts2, RANSAC);
// 從 H 分解旋轉角度(略)