資源簡介
利用OpenCV中SolvePnP函數實現相機姿態的求解。并在此基礎上利用SolvePnPRansac函數求解相機姿態使得結果更準確。代碼包含詳細注釋。
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?“aruco.h“
using?namespace?std;
using?namespace?cv;
const?Mat??intrinsic_matrix?=?(Mat_(3?3)
???????????????????????????????<868.2187??0?????????345.93152
??????????????????????????????????0?????????870.4765??252.03741
??????????????????????????????????0?????????0?????????1);
//k1k2p1p2k3
const?Mat??distCoeffs?=?(Mat_(5?1)?<0.17153?0.06634?0.00465?0.00868?0);
//相機畸變參數
const?Mat??arucodistCoeffs?=?(Mat_(1?5)?<0?0?0?0?0);//
//判斷solvePnPRansac是否完成
bool?PnPRansac;
int?main(int?args?char?*argv[])
{
//圖像物理坐標
//vector?>?projectedPoints;
vector?imgpoint;
Point3f?pointimg0?pointimg1?pointimg2?pointimg3;
pointimg0?=?cv::Point3f(-0.046f?-0.046f?0);
pointimg1?=?cv::Point3f(+0.046f?-0.046f?0);
pointimg2?=?cv::Point3f(+0.046f?+0.046f?0);
pointimg3?=?cv::Point3f(-0.046f?+0.046f?0);
imgpoint.push_back(cv::Point3f(-0.046f?-0.046f?0));
imgpoint.push_back(cv::Point3f(+0.046f?-0.046f?0));
imgpoint.push_back(cv::Point3f(+0.046f?+0.046f?0));
imgpoint.push_back(cv::Point3f(-0.046f?+0.046f?0));
//獲取相機
VideoCapture?cap(1);
????????
Mat?frameframecopy;
//設置字典
cv::aruco::Dictionary?dictionary?=?cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250);
while?(true)
{
cap>>frame;
frame.copyTo(framecopy);
vector?ids;
vector?>?corners;
vector?>?outArry;
//檢測markers(待檢測marker的圖像,字典對象,角點列表,marker的id列表)
cv::aruco::detectMarkers(framecopy?dictionary?corners?ids);
if?(ids.size()?>?0)//檢測到marker
{
cout<<“numberr?of?ids:??“< for(int?i=0;i {
//輸出每一個id
cout<<“ids:??“< }
double?x=?(corners[0][0].x+corners[0][1].x+corner
- 上一篇:農夫過河問題
- 下一篇:巴特沃斯低通濾波器的c語言實現
評論
共有 條評論