图像处理中常用的坐标系转换
生活随笔
收集整理的這篇文章主要介紹了
图像处理中常用的坐标系转换
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
共有四種坐標(biāo)系
世界坐標(biāo)系——>相機(jī)坐標(biāo)系
[Xc,Yc,Zc]T表示相機(jī)坐標(biāo),[Xw,Yw,Zw,1]T表示歸物體所在的世界坐標(biāo)。R表示旋轉(zhuǎn)矩陣,T表示平移矩陣。
相機(jī)坐標(biāo)系——>圖像坐標(biāo)系
圖像坐標(biāo)系——>像素坐標(biāo)系
通過(guò)相機(jī)標(biāo)定,我們可以獲取相機(jī)的內(nèi)參數(shù)和外參數(shù)矩陣
內(nèi)參數(shù)矩陣:
https://www.cnblogs.com/wangguchangqing/p/8126333.html
其中Fx=fdx,Fy=fdy,u0=cx,v0=cy。
綜合上述,則總公式如下:
轉(zhuǎn)換代碼
/***************************************************************************************** 1、激光雷達(dá)映射圖像 *****************************************************************************************/ #include<opencv2/opencv.hpp> #include <iostream> #include <fstream> #include <stdlib.h> //srand()和rand()函數(shù) #include <time.h> //time()函數(shù) #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/objdetect/objdetect.hpp> #include <opencv2/ml/ml.hpp> #include<opencv2\opencv.hpp> #include <opencv2\imgproc\types_c.h> #include<windows.h> using namespace std; using namespace cv; using namespace ml;//double R[] = //{ //-0.000946327557628447 , 0.00924509852185524, 0.999956815376281, //-0.999910170350762 , 0.0133606413543068, -0.00106980919429913, //-0.0133699548714382 , -0.999868001996225, 0.00923162449479668 //};double R[] = {-0.000946327557628447 , -0.999910170350762, -0.0133699548714382,0.00924509852185524 , 0.0133606413543068, -0.999868001996225,0.999956815376281 , -0.00106980919429913, 0.00923162449479668 };double T[] = {0.106387638682809, - 0.0655453193303612, - 0.0423556338963880 };int main() {//double Xw = 0;//double Yw = 0;//double Zw = 0;double Xw = 1.16;double Yw = 1.18;double Zw = 0.253;double Xw1 = 1.52;double Yw1 = 0.274;double Zw1 = -0.433;double Xw2 = 1.51;double Yw2 = 0.274;double Zw2 = -0.346;/*8月20日*/double Xw3 = 5.12;double Yw3 = 1.94;double Zw3 = 1.26;double Xw4 = 5.62;double Yw4 = 1.3;double Zw4 = 1.32;double Xc = 0;double Yc = 0;double Zc = 0;double Xc1 = 0;double Yc1 = 0;double Zc1 = 0;double Xc2 = 0;double Yc2 = 0;double Zc2 = 0;double Xc3 = 0;double Yc3 = 0;double Zc3 = 0;double Xc4 = 0;double Yc4 = 0;double Zc4 = 0;double Fx = 901.542952546068;double Fy = 899.822262198022 ;double Cx = 1014.57219246244;double Cy = 431.675147682217;double u = 0;double v = 0;double u1 = 0;double v1 = 0; double u2 = 0;double v2 = 0;printf("R[0]=%f R[1]=%f R[2]=%f \n R[3]=%f R[4]=%f R[5]=%f \n R[6]=%f R[7]=%f R[8]=%f\n", R[0], R[1], R[2],R[3],R[4],R[5], R[6], R[7], R[8]);//1、世界坐標(biāo)系——>相機(jī)坐標(biāo)系Xc = Xw*R[0] + Yw*R[1] + Zw*R[2] + T[0];Yc = Xw*R[3] + Yw*R[4] + Zw*R[5] + T[1];Zc = Xw*R[6] + Yw*R[7] + Zw*R[8] + T[2];Xc1 = Xw1*R[0] + Yw1*R[1] + Zw1*R[2] + T[0];Yc1 = Xw1*R[3] + Yw1*R[4] + Zw1*R[5] + T[1];Zc1 = Xw1*R[6] + Yw1*R[7] + Zw1*R[8] + T[2];Xc2 = Xw2*R[0] + Yw2*R[1] + Zw2*R[2] + T[0];Yc2= Xw2*R[3] + Yw2*R[4] + Zw2*R[5] + T[1];Zc2 = Xw2*R[6] + Yw2*R[7] + Zw2*R[8] + T[2];Xc3 = Xw3*R[0] + Yw3*R[1] + Zw3*R[2] + T[0];Yc3 = Xw3*R[3] + Yw3*R[4] + Zw3*R[5] + T[1];Zc3 = Xw3*R[6] + Yw3*R[7] + Zw3*R[8] + T[2];Xc4 = Xw4*R[0] + Yw4*R[1] + Zw4*R[2] + T[0];Yc4 = Xw4*R[3] + Yw4*R[4] + Zw4*R[5] + T[1];Zc4 = Xw4*R[6] + Yw4*R[7] + Zw4*R[8] + T[2];//2、相機(jī)坐標(biāo)系——>圖像坐標(biāo)系——>像素坐標(biāo)系u = Fx*Xc / Zc + Cx;v= Fy*Yc / Zc + Cy;printf("u=%f\n", u);printf("v=%f\n", v);u1 = Fx*Xc1 / Zc1 + Cx;v1 = Fy*Yc1 / Zc1 + Cy;printf("u1=%f\n", u1);printf("v1=%f\n", v1);u2 = Fx*Xc2 / Zc2 + Cx;v2 = Fy*Yc2 / Zc2 + Cy;printf("u2=%f\n", u2);printf("v2=%f\n", v2);double u3 = Fx*Xc3 / Zc3 + Cx;double v3 = Fy*Yc3 / Zc3 + Cy;printf("u2=%f\n", u2);printf("v2=%f\n", v2);double u4 = Fx*Xc4 / Zc4 + Cx;double v4 = Fy*Yc4 / Zc4 + Cy;printf("u4=%f\n", u4);printf("v4=%f\n", v4);Mat srcImage0 = imread("2.png");//讀取圖片 resize(srcImage0, srcImage0, Size(1920,1080), 0, 0, INTER_LINEAR);if (srcImage0.empty()){printf("[ALG ERROR][函數(shù):%s][行號(hào):%d],圖片未正常讀取,請(qǐng)檢查輸入路徑十分正確 \n", __FUNCTION__, __LINE__, 1);}//circle(srcImage0, Point(u,v), 10, Scalar(0, 255, 0), -1); //circle(srcImage0, Point(u1, v1), 10, Scalar(0, 255, 0), -1); //circle(srcImage0, Point(u2, v2), 10, Scalar(0, 255, 0), -1); circle(srcImage0, Point(u3, v3), 10, Scalar(0, 0, 255), -1); circle(srcImage0, Point(u4, v4), 10, Scalar(0, 0, 255), -1);namedWindow("srcImage0", 0);imshow("srcImage0", srcImage0);waitKey(200);return 0; }相關(guān)轉(zhuǎn)換代碼
https://blog.csdn.net/guyuealian/article/details/104184551
參考:
https://blog.csdn.net/weizhangyjs/article/details/81020177
https://blog.csdn.net/baidu_38172402/article/details/81949447
https://www.cnblogs.com/wangguchangqing/p/8126333.html
https://blog.csdn.net/yangdashi888/article/details/51356385
總結(jié)
以上是生活随笔為你收集整理的图像处理中常用的坐标系转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: usbserver项目案例4,usbse
- 下一篇: 建筑设计师纷纷进军元宇宙,虚拟建筑将成为