美文网首页
iOS_OpenCV透视映射

iOS_OpenCV透视映射

作者: Champion | 来源:发表于2018-06-25 15:34 被阅读32次

想实现的就是把下图中的书摆正~


IMG_0107.JPG
效果图.jpeg

UIImage *image = [UIImage imageNamed:@"996.jpg"];

cv:: Mat srcImage,dstImage;

UIImageToMat(image, srcImage);

cv:: Point2f src_point[] = {cv::Point2f(121,75),
                            cv::Point2f(470,28),
                            cv::Point2f(475,476),
                            cv::Point2f(115,431)
                            };

cv:: Point2f dst_point[] = {cv::Point2f(0,0),
                            cv::Point2f(350,0),
                            cv::Point2f(350,470),
                            cv::Point2f(0,470)
                            };

cv::Mat mat = cv::getPerspectiveTransform(src_point, dst_point);
cv::warpPerspective(srcImage, dstImage, mat, cv::Size(350,470),cv::INTER_LINEAR);

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(50.f, 80.f, 350.f, 470.f)];
imageView.image = MatToUIImage(dstImage);
[self.view addSubview:imageView];

这里用到是getPerspectiveTransform 和 warpPerspective 函数
当然上面用到的src_point 和 dst_point 都是我事先拿到的测试数据,至于如何通过代码获取,还没有很好的想法。

CV_EXPORTS Mat getPerspectiveTransform( const Point2f src[], const Point2f dst[] );

注释 returns 3x3 perspective transformation for the corresponding 4 point pairs. 返回一个3x3的变换矩阵。

CV_EXPORTS_W void warpPerspective( InputArray src, OutputArray dst, InputArray M, Size dsize, int flags = INTER_LINEAR,int borderMode = BORDER_CONSTANT,const Scalar& borderValue = Scalar());

*第一个参数,InputArray 类型的src,输入图像
*第二个参数,OutputArray 类型的dst,函数调用后的运算结果存在这里
*第三个参数,InputArray类型的M,3x3的变换矩阵
*第四个参数,Size类型的dsize,表示输出图像的尺寸
*第五个参数,int类型的flags,插值方法的标识符。默认INTER_LINEAR(线性插值)

标识符 含义
INTER_NEAREST 最紧邻插值
INTER_LINEAR 线性插值(默认)
INTER_AREA 区域插值
INTER_CUBIC 三次样条插值
INTER_LANCZOS4 lanczos 插值
CV_WARP_FILL_OUTLIERS 填充所有输出图像的像素。如果部分像素落在输入图像的边界外,那么其值设定为fillval
CV_WARP_INVERSE_MAP 表示M为输出图像到输入图像的反变换。因此可以直接用来做像素插值。否则,函数从M矩阵得到反变换

*第六个参数,int类型的borderMode,边界像素模式,默认值为BORDER_CONSTANT
*第七个参数,const Scalar&类型的borderValue,在恒定的边界情况下取的值,默认Scalar(),即0

相关文章

  • iOS_OpenCV透视映射

    想实现的就是把下图中的书摆正~ UIImage *image = [UIImage imageNamed:@"99...

  • 透视纹理映射

    伪3D中的贴图纹理的透视矫正深入探索透视纹理映射(上)深入探索透视纹理映射(下)Perspective Textu...

  • 几何变换

    几何变换是指将一幅图像映射到另一副图像内的操作,根据映射关系的不同,有缩放、翻转、仿射变换、透视、重映射等。 1....

  • iOS_OpenCV导入

    这里是 OpenCV官网 下载后直接把opencv2.framework拖入工程中 1、添加iOS的依赖库 Ass...

  • 杂志投稿

    《真情大爱》这部小说,透视了祖孙四代悲欢离合。虚构中有映射现实,但没有对社会批判、因为这样“不正能量、不容易出版”...

  • 素描透视不会?构图不清楚?来统统教你!

    【透视】 透视分为:一点透视(平行透视)、二点透视(成角透视)、三点透视、圆体透视。 消失点是什么? #消失点# ...

  • 你好,数据透视表——小白聊财务(4)

    你好,数据透视表你好,数据透视表你好,数据透视表你好,数据透视表你好,数据透视表你好,数据透视表你好,数据透视表你...

  • 画面造型要务(要点)之一空间感(透视感)的分类

    线性透视、空间透视、散点透视、多点透视 线性透视 线性透视即人们平时所说的“透视”,它的界定是“用几何方法在平面上...

  • 12月25日第二节课时

    今天主要学习了透视:近大远小的一种视觉 一、类型: 平行透视(一点透视) 成角透视(两点透视) 斜角透视(三点透视...

  • 相机矩阵(Camera Matrix)

    投影 透视投影(perspective projection) 透视投影属于中心投影。透视投影图简称为透视图或透视...

网友评论

      本文标题:iOS_OpenCV透视映射

      本文链接:https://www.haomeiwen.com/subject/xqvqyftx.html