日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

point-position2修改版

發(fā)布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 point-position2修改版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說明:

?在共面直線測試中,由于計算誤差等原因,共面條件判斷不準,但計算結果依然正確。

// point-position2.cpp : 定義控制臺應用程序的入口點。 #include "stdafx.h" #include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/highgui/highgui.hpp" #include <opencv2/nonfree/features2d.hpp> #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/nonfree/nonfree.hpp" #include "opencv2/legacy/legacy.hpp" #include<Eigen/Core> #include <Eigen/Dense> #include<math.h> using namespace cv;int main( int argc, char** argv ) {Mat img_1 = imread("book_in_scene.png");Mat img_2 = imread("book2.png");if( !img_1.data || !img_2.data ){ std::cout<< " --(!) Error reading images " << std::endl; return -1; }//-- Step 1: Detect the keypoints using SURF Detectorint minHessian = 400;SiftFeatureDetector detector( minHessian );//SurfFeatureDetector detector( minHessian ); vector<KeyPoint> keypoints_1, keypoints_2;detector.detect( img_1, keypoints_1 );detector.detect( img_2, keypoints_2 );//-- Step 2: Calculate descriptors (feature vectors) SiftDescriptorExtractor extractor;//SurfDescriptorExtractor extractor; Mat descriptors_1, descriptors_2;extractor.compute( img_1, keypoints_1, descriptors_1 );extractor.compute( img_2, keypoints_2, descriptors_2 );//-- Step 3: Matching descriptor vectors using FLANN matcher FlannBasedMatcher matcher;std::vector< DMatch > matches;matcher.match( descriptors_1, descriptors_2, matches );double max_dist = 0; double min_dist = 100;//-- Quick calculation of max and min distances between keypointsfor( int i = 0; i < descriptors_1.rows; i++ ){ double dist = matches[i].distance;if( dist < min_dist ) min_dist = dist;if( dist > max_dist ) max_dist = dist;}//printf("-- Max dist : %f \n", max_dist );//printf("-- Min dist : %f \n", min_dist );//-- Draw only "good" matches (i.e. whose distance is less than 2*min_dist )//-- PS.- radiusMatch can also be used here.std::vector< DMatch > good_matches;for( int i = 0; i < descriptors_1.rows; i++ ){ if( matches[i].distance < 2*min_dist ){ good_matches.push_back( matches[i]); }}//-- Draw only "good" matches Mat img_matches;drawMatches( img_1, keypoints_1, img_2, keypoints_2,good_matches, img_matches);//-- Show detected matches//imshow( "Good Matches", img_matches );//imwrite("Lena_match_surf.jpg",img_matches);//imwrite("Lena_match_sift.jpg",img_matches);//good_matches[i].queryIdx保存著第一張圖片匹配點的序號,keypoints_1[good_matches[i].queryIdx].pt.x 為該序號對應的點的x坐標。y坐標同理//good_matches[i].trainIdx保存著第二張圖片匹配點的序號,keypoints_2[good_matches[i].trainIdx].pt.x 為為該序號對應的點的x坐標。y坐標同理printf( "--Keypoint 1:%f,%f: %d -- Keypoint 2:%f,%f: %d \n", keypoints_1[good_matches[0].queryIdx].pt.x,keypoints_1[good_matches[0].queryIdx].pt.y,good_matches[0].queryIdx, keypoints_2[good_matches[0].trainIdx].pt.x,keypoints_2[good_matches[0].trainIdx].pt.y,good_matches[0].trainIdx );/*_______________________________________________________________________________________________________________________________*/double x_inImage1,y_inImage1,x_inImage2,y_inImage2,y,X,Y,alpha,gamma;//像面坐標(x,y)和圖像尺寸(X,Y)以及成像視場角(alpha,gamma)double x1,y1,z1,x2,y2,z2;//雙站坐標double alpha1,gamma1;//雙站俯仰角和偏轉角double alpha2,gamma2;//賦予初始值alpha1=45;alpha1=90;//測試共面gamma1=45;alpha2=270;gamma2=45;X=640;Y=480;double FOVx=10;double FOVy=FOVx*Y/X;x1=0,y1=0,z1=0;x2=0,y2=200,z2=0;/* //測角偏差補償x_inImage1=keypoints_1[good_matches[0].queryIdx].pt.x;//目標點坐標由匹配所得y_inImage1=keypoints_1[good_matches[0].queryIdx].pt.y;x_inImage2=keypoints_2[good_matches[0].queryIdx].pt.x;y_inImage2=keypoints_2[good_matches[0].queryIdx].pt.y;double deviation_alpha1=(x_inImage1-X/2)/X*FOVx;double deviation_alpha2=(x_inImage2-X/2)/X*FOVx;double deviation_gamma1=(y_inImage1-Y/2)/X*FOVy;double deviation_gamma2=(y_inImage2-Y/2)/X*FOVy;alpha1=alpha1+deviation_alpha1;alpha2=alpha2+deviation_alpha2;gamma1=gamma1+deviation_gamma1;gamma2=gamma2+deviation_gamma2; *///開始計算double pi=16*(atan(1.0/5))-4*atan(1.0/239);//精確定義圓周率std::cout<<"pi為:"<<pi<<std::endl;alpha1=alpha1*pi/180;//角度弧度轉換gamma1=gamma1*pi/180;alpha2=alpha2*pi/180;gamma2=gamma2*pi/180;// std::cout<<"cos(alpha1)為:"<<cos(alpha1)<<std::endl; // std::cout<<"cos(gamma1)為:"<<cos(gamma1)<<std::endl;double m1=(cos(alpha1))*(cos(gamma1));double n1=(sin(alpha1))*(cos(gamma1));double p1=sin(gamma1);double m2=(cos(alpha2))*(cos(gamma2));double n2=(sin(alpha2))*(cos(gamma2));double p2=sin(gamma2);std::cout<<"方向向量1為:"<<m1<<""<<n1<<""<<p1<<std::endl;std::cout<<"方向向量2為:"<<m2<<""<<n2<<""<<p2<<std::endl;double coplane;//共面判斷coplane=(x2-x1)*(n1*p2-n2*p1)-(y2-y1)*(m1*p2-m2*p1)+(z2-z1)*(m1*n2-m2*n1);//coplane=0共面if(coplane){//計算公垂線方向向量A1、B1、C1double A1=n1*p2-n2*p1;double B1=p1*m2-p2*m1;double C1=m1*n2-m2*n1;// double A2=n2*C1-p2*B1;double B2=p2*A1-m2*C1;double C2=m2*B1-n2*A1;double A3=n1*C1-p1*B1;double B3=p1*A1-m1*C1;double C3=m1*B1-n1*A1;double delta1=n1*(B1*C2-B2*C1)+m1*(A1*C2-A2*C1);double delta2=n2*(B1*C3-B3*C1)+m2*(A1*C3-A3*C1);double D1=A2*(x2-x1)+B2*(y2-y1)+C2*(z2-z1);double D2=A3*(x1-x2)+B3*(y1-y2)+C3*(z1-z2);double Xg,Yg,Zg,Xh,Yh,Zh,Xtarget,Ytarget,Ztarget;//兩直線垂足G和H點坐標,目標點在其中點位置。Xg=x1-(D1*m1*C1)/delta1;Yg=y1-(D1*n1*C1)/delta1;Zg=z1+D1*(A1*m1+B1*n1)/delta1;Xh=x2-(D2*m2*C1)/delta2;Yh=y2-(D2*n2*C1)/delta2;Zh=z2+D2*(A1*m2+B1*n2)/delta2;Xtarget=(Xg+Xh)/2;Ytarget=(Yg+Yh)/2;Ztarget=(Zg+Zh)/2;std::cout<<"目標坐標為:"<<Xtarget<<""<<Ytarget<<""<<Ztarget<<std::endl<<std::endl;}else//兩線共面且相交,引入參數t {double t;t=(p2*(y1-y2)+n2*(z2-z1))/(n2*p1-p2*n1);double Xtarget,Ytarget,Ztarget;Xtarget=x1+m1*t;Ytarget=y1+n1*t;Ztarget=z1+p1*t;std::cout<<"目標坐標為:"<<Xtarget<<""<<Ytarget<<""<<Ztarget<<std::endl<<std::endl;}getchar();//waitKey(0);return 0; }

?

共面直線測試中,沒有跳進共面直線解析交點中,但結果依然正確:

單獨測試共面直線求交點結果為:

?

轉載于:https://www.cnblogs.com/wxl845235800/p/9067754.html

總結

以上是生活随笔為你收集整理的point-position2修改版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91在线视频免费观看 | 色一区二区三区四区 | 欧美做受高潮中文字幕 | 中文字幕免费高清视频 | 中国老熟女重囗味hdxx | 69日影院| 在线观看黄色免费视频 | 一二三区免费 | 成人av观看| 日韩av在线免费看 | 久久夜色精品国产欧美乱极品 | 久久国产a | 日韩电影在线一区 | 久久久福利视频 | 色综合久久久久 | 欧美第一页在线观看 | 国产激情免费视频 | 国产老女人乱淫免费 | 国产欧美一区二区三区另类精品 | 成年人黄色录像 | 亚洲精品另类 | 国产三级精品三级 | 国产精品一级视频 | 欧美精品乱人伦久久久久久 | 欧美乱仑 | 黄色大片黄色大片 | 国产亚洲欧美视频 | www.88av| 91pao | 99小视频 | 99在线免费观看视频 | 成人精品一区二区 | 欧日韩在线 | 亚洲一区av在线 | 国产丝袜一区二区 | 亚洲成成品网站 | 黑人巨大猛烈捣出白浆 | 伊人影音| 一区二区国产精品 | 日韩人妻无码一区二区三区 | 青青草手机在线视频 | 国产成人免费看一级大黄 | 欧洲美女毛片 | 欧美操老女人 | 国产xxxx在线观看 | 黄色av免费在线播放 | 亚州国产 | 亚洲综合第一 | 极品美女一区二区三区 | 女同久久另类69精品国产 | 国模吧无码一区二区三区 | 特级黄色一级片 | 强开小嫩苞一区二区三区网站 | 天堂草在线观看 | 国产在线精品福利 | 一区二区韩国 | 夜夜操网站 | 五级黄高潮片90分钟视频 | 91吃瓜在线 | 波多野结衣视频网站 | 亚洲av永久无码精品一百度影院 | 性插动态视频 | 国产卡一卡二卡三 | 成人午夜大片 | 在线观看亚洲区 | 亚洲区在线 | 午夜一区二区三区在线 | wwwwxxxx国产| 99爱视频在线观看 | 欧美黄色激情视频 | 精品久久免费视频 | 密桃成熟时在线观看 | 日韩成人在线观看视频 | 91 在线观看 | 伊人手机视频 | 国产精品一区二区黑人巨大 | 黄色网址你懂的 | 亚洲同性gay激情无套 | 伊人精品| 国产中文字幕二区 | 久久婷婷五月综合 | 激情午夜视频 | 伊人91视频| 女人天堂网站 | 五月天免费网站 | 亚洲精品69 | 国产剧情av在线 | 成人高清视频在线观看 | 在线观看免费中文字幕 | 成人在线一区二区 | 懂色视频在线观看 | 婷婷视频在线 | 欧美日本韩国一区 | 精品久久五月天 | 九九热九九 | 中文无码精品一区二区三区 | 91亚洲国产成人精品一区二三 | 91精品啪在线观看国产线免费 | 国产综合免费视频 |