图片透视校正 java js_iOS 使用OpenCV 实现图片的透视校正

95f266d063dc

孤独的香蕉.png

一、前言

写这篇博客的目的为记录,并且供大家学习,希望大家多多交流,有不正确的地方请指正,轻喷。!~~

二、透视校正 简介

透视校正或者称为透视控制是对照片进行合成或者编辑以得到符合大众对于透视失真理解的结果的过程。

三、流程

首先想要对照片中的物体进行透视校正 所以就先要找到图片中的物体,一般都是矩形的物体,所以就需要用到OpenCv中找矩形的方法先找到图片中所有的矩形,然后判断寻找最大的矩形,然后再对这个矩形进行校正就OK拉。

上代码:

//寻找矩形

- (void)detectEdges{

cv::Mat original = [BLOpenCVHelper cvMatFromUIImage:_myImageView.image];

CGSize targetSize = self.myImageView.contentSize;

//把图片按比例缩小,因为屏幕显示的图片并不是实际大小,所以需要把图片的大小按比例缩小成当前屏幕的大小,并且映射过去,这样找矩形的时候返回的4个点坐标才是正确的

cv::resize(original, original, cvSize(targetSize.width, targetSize.height));

std::vector<:vector>>squares;

std::vector<:point> largest_square;

//寻找矩形

find_squares(original, squares);

//寻找最大的矩形

find_largest_square(squares, largest_square);

if (largest_square.size() == 4) {

// Manually sorting points, needs major improvement. Sorry.

NSMutableArray *points = [NSMutableArray array];

NSMutableDictionary *sortedPoints = [NSMutableDictionary dictionary];

for (int i = 0; i < 4; i++)

{

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSValue valueWithCGPoint:CGPointMake(largest_square[i].x, largest_square[i].y)], @"point" , [NSNumber numberWithInt:(largest_square[i].x + largest_square[i].y)], @"value", nil];

[points addObject:dict];

}

int min = [[points valueForKeyPath:@"@min.value"] intValue];

int max = [[points valueForKeyPath:@"@max.value"] intValue];

int minIndex = 0;

int maxIndex = 0;

int missingIndexOne = 0;

int missingIndexTwo = 0;

for (int i = 0; i < 4; i++)

{

NSDictionary *dict = [points o

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值