Ios 通过CATTransferM3D将单应性(OpenCV)应用于CALayer
我在iPhone上玩AR,我在将单应性应用于CALayer时遇到了一个问题,我无法解决这个问题。所以我请求你的帮助 应用程序Ios 通过CATTransferM3D将单应性(OpenCV)应用于CALayer,ios,opencv,Ios,Opencv,我在iPhone上玩AR,我在将单应性应用于CALayer时遇到了一个问题,我无法解决这个问题。所以我请求你的帮助 应用程序 只支持方向的景观权 从iPhone摄像头接收640x480帧流 使用OpenCV函数处理每个帧: 试图找到将目标图像映射到从相机接收的帧上的单应性 第一幅图显示计算的单应性是正确的:彩色目标图像精确地放置在帧中包含的相应灰度图像的顶部。灰度帧对应于从照相机接收的经处理的RGB照相机帧。见截图 作为第二步,我尝试在识别的目标图像上覆盖一部电影。我添加了一个MPMovi
- 只支持方向的景观权李>
- 从iPhone摄像头接收640x480帧流李>
- 使用OpenCV函数处理每个帧:
- 试图找到将目标图像映射到从相机接收的帧上的单应性
MPMoviePlayerController
,然后将计算出的单应性F
转换为4x4 CATTransferM3D矩阵ttt
矩阵ttt
的值按以下方式设置(F
具有行主顺序,ttt需要为列主顺序):
电影尺寸为480x270
可能存在与纵横比相关的问题,但在阅读了大量文档后,我没有其他想法进行测试。所以我希望有人能帮助我
CATransform3D ttt;
ttt.m11 = (CGFloat) F.at<double>(0,0);
ttt.m12 = (CGFloat) F.at<double>(1,0);
ttt.m13 = (CGFloat) 0;
ttt.m14 = (CGFloat) F.at<double>(2,0);
ttt.m21 = (CGFloat) F.at<double>(0,1);
ttt.m22 = (CGFloat) F.at<double>(1,1);
ttt.m23 = (CGFloat) 0;
ttt.m24 = (CGFloat) F.at<double>(2,1);
ttt.m31 = (CGFloat) 0;
ttt.m32 = (CGFloat) 0;
ttt.m33 = (CGFloat) 1;
ttt.m34 = (CGFloat) 0;
ttt.m41 = (CGFloat) F.at<double>(0,2);
ttt.m42 = (CGFloat) F.at<double>(1,2);
ttt.m43 = (CGFloat) 0;
ttt.m44 = (CGFloat) F.at<double>(2,2);
[moviePlayer.view.layer setFrame:CGRectMake(0, 0, 640, 480)];
[moviePlayer setScalingMode:MPMovieScalingModeFill];
[moviePlayer.view.layer setBounds:CGRectMake(0, 0, 640, 480)];
[moviePlayer.view.layer setAnchorPoint:CGPointMake(0, 0)];
CGFloat borderW = 4.0;
moviePlayer.view.layer.borderWidth = borderW;
CGColorRef borderColor = [UIColor redColor].CGColor;
moviePlayer.view.layer.borderColor = borderColor;