Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void TestOpenCV(Vector3[] objectPointsUnityVector3, Vector2[] imagePointsUnityVector2)
- {
- // convert Vector3[] into MCvPoint3D32f[] and Vector2[] into PointF[]
- var objectPoints = new Emgu.CV.Structure.MCvPoint3D32f[4];
- var imagePoints = new System.Drawing.PointF[4];
- for (int i = 0; i < objectPointsUnityVector3.Length; i++)
- {
- objectPoints[i] = new Emgu.CV.Structure.MCvPoint3D32f(objectPointsUnityVector3[i].x, objectPointsUnityVector3[i].y, objectPointsUnityVector3[i].z);
- imagePoints[i] = new System.Drawing.PointF(imagePointsUnityVector2[i].x, imagePointsUnityVector2[i].y);
- }
- /* For SolvePnPRansac
- // create vertors of points
- var objectPointsRansac = new Emgu.CV.Util.VectorOfPoint3D32F(objectPoints);
- var imagePointsRansac = new Emgu.CV.Util.VectorOfPointF(imagePoints);
- //*/
- // try to get the Camera matrix into a valid format?
- // THIS IS WHERE I NEED HELP
- /*/ Tried using the projection matrix values, the focal length, etc
- var cameraProjectionMatrix = _mainCamera.projectionMatrix;
- _mainCamera.usePhysicalProperties = true;
- var focalLength = _mainCamera.focalLength;
- //*/
- var fx = Screen.width;
- var cx = 0f;
- var fy = Screen.height;
- var cy = 0f;
- var cameraMatrix = new Emgu.CV.Matrix<float>(new float[3, 3] {
- {fx,0,cx},
- {0,fy,cy},
- {0,0,1}
- });
- IInputArray distortionCoeffs = new Emgu.CV.Util.VectorOfFloat(new float[4] { 0f, 0f, 0f, 0f });
- // define valid output variables?
- var rvec = new Emgu.CV.Util.VectorOfFloat();
- var tvec = new Emgu.CV.Util.VectorOfFloat();
- /*/
- Debug.Log("everything works up to here");
- return;
- //*/
- try
- {
- /* RANSAC made the editor crash
- var iterations = 10;
- var reprojectionError = 1f;
- var confident = 0.1f;
- var inliers = new Emgu.CV.Util.VectorOfInt(); // i guess this is a reference that will get filled?
- CvInvoke.SolvePnPRansac(objectPointsRansac, imagePointsRansac, cameraMatrix, distortionCoeffs, rvec, tvec,false, iterations, reprojectionError, confident, inliers, Emgu.CV.CvEnum.SolvePnpMethod.Iterative); //.EPnP);
- //*/
- CvInvoke.SolvePnP(objectPoints, imagePoints, cameraMatrix, distortionCoeffs, rvec, tvec);
- var translation = new Vector3(tvec[0], -tvec[1], tvec[2]);
- var rotation = new Vector3(-rvec[0], rvec[1], rvec[2]) * Mathf.Rad2Deg;
- Debug.Log(translation.ToString() + " " + rotation.ToString());
- _mainCamera.transform.position = Vector3.zero;
- _mainCamera.transform.rotation = Quaternion.identity;
- _transformToPosition.rotation = Quaternion.Euler(rotation);
- _transformToPosition.position = translation;
- }
- catch (System.Exception e)
- {
- Debug.Log("exception: " + e);
- }
- }
Add Comment
Please, Sign In to add comment