需要安裝opencv3中的features2d模組
**中的1.png
**中的2.png
// 來自高翔slam十四講
#include#include#include#include#includeusing namespace std;
using namespace cv;
void find_feature_matches(
const mat& img_1, const mat& img_2,
std::vector& keypoints_1,
std::vector& keypoints_2,
std::vector& matches);
void pose_estimation_2d2d(
std::vectorkeypoints_1,
std::vectorkeypoints_2,
std::vectormatches,
mat& r, mat& t);
// 畫素座標轉相機歸一化座標
point2d pixel2cam(const point2d& p, const mat& k);
// 三角測量
void triangulation(
const vector& keypoint_1,
const vector& keypoint_2,
const std::vector& matches,
const mat& r, const mat& t,
vector& points
);int main()
printf("--max dist : %f\n", max_dist);
printf("--min dist : %f \n", min_dist);
// 當描述子之間的距離大於兩倍的最小距離時,即認為匹配有誤
// 設定30為閾值
for(int i=0; i(0,2))/k.at(0,0),
(p.y - k.at(1,2))/k.at(1,1)
);}void pose_estimation_2d2d(std::vectorkeypoints_1,
std::vectorkeypoints_2,
std::vectormatches,
mat&r ,mat& t)
// 計算基礎矩陣:使用的8點法,但是書上說8點法是用來計算本質矩陣的呀,這兩個有什麼關係嗎
mat fundamental_matrix;
fundamental_matrix = findfundamentalmat(points1, points2, cv_fm_8point);
cout<<"fundamental_matrix is "<& keypoint_1,
const vector& keypoint_2,
const std::vector& matches,
const mat& r, const mat& t,
vector& points)
mat pts_4d;
cv::triangulatepoints(t1, t2, pts_1, pts_2, pts_4d);
// 轉換成非齊次座標
for(int i=0; i(3,0); // 歸一化
point3d p(
x.at(0,0),
x.at(1,0),
x.at(2,0)
);points.push_back(p);
}}
三角測量原理與雙目視覺景深恢復
眼睛是靈敏的光學感覺器官,是一切動物與外界聯絡的資訊接受器。眾所周知人類依靠雙眼可以感知現實世界 物體的顏色 距離 大小等。隨著生物解剖學的發展,人們對人眼的生物結構及機能有了科學的認識。人眼是乙個天然的高階光學系統。結構非常複雜。形象的說,人眼像一架自動攝像機,水晶體如同攝像機的物鏡,能夠在人的神...
從特徵點匹配到 ,通過三角測量估計三維點座標
include include include include include using namespace std using namespace cv void find feature matches const mat img 1,const mat img 2,std vector ke...
利用css畫三角
1 新建乙個元素,隨便什麼元素,不過我習慣性的會用塊元素來做。如果行內元素就display block它。2 把它的寬高設定為height 0px width 0px 3 設定邊框border屬性,用來實現三角形。首先要了解border具體是怎麼樣的,我寫了乙個這樣的樣式 border 50px s...