在图像处理和计算机视觉领域中,如何冲当前的退选哪个中提取出所需要的特征信息是图像识别的关键所在。在许多应用场合中需要快速的检测出直线或者是圆。其中一种非常有效的的解决方法是霍夫变换,其为图像处理中从图像中识别几何图形的基本方法。

霍夫变换的概述

霍夫变换在opencv中分为霍夫线变换和霍夫圆变换

opencv中的霍夫线变换

霍夫线变换是一种用来寻找直线的方法,在使用霍夫线变换之前,首先对图像进行边缘检测,即霍夫线变换的直接输入只能是边缘二值图像。

opencv中霍夫线变换有三种

(1)标准霍夫变换(SHT),由HoughLines调用

(2)多尺度霍夫变换(MSHT),由HoughLines调用,

(3)累计概率霍夫变换(PPHT),由HoughLinesP调用,可以在一定范围内进行霍夫变换

霍夫变换的原理

标准霍夫变换函数:HoughLines()

void HoughLines( InputArray image,// 源图像,需为8位的单通道二进制图像,可以将任意的源图像载进来,并由函数修改成此格式再放进来

OutputArray lines,

double rho,

double theta,

int threshold,

double srn = 0,

double stn = 0,

double min_theta = 0,

double max_theta = CV_PI );

参数详解

代码实现

NSString *image = @"lou.png";

UIImage *image1 = [UIImage imageNamed:image];

Mat im;    UIImageToMat(image1, im);

if (im.empty()) {

return;

}

// 创建零时变量

Mat midImage,dstImage;

// 进行边缘检测和转换为灰度图

Canny(im, midImage, 50, 200);

cvtColor(midImage, dstImage, COLOR_GRAY2BGR);

// 进行霍夫变换

std::vector<Vec2f>lines;// 定义一个矢量lines,存放得到的线段矢量集合

HoughLines(midImage, lines, CV_PI/180, 150, 0);

for (size_t i = 0; i < lines.size(); i++) {

float rho = lines[i][0],theta = lines[i][1];

cv::Point pt1,pt2;

double a = cos(theta),b = sin(theta);

double x0 = a*rho,y0 = b*rho;

pt1.x = cvRound(x0 + 1000*(-b));

pt1.y = cvRound(y0 + 1000*(a));

pt2.x = cvRound(x0 - 1000*(-b));

pt2.y = cvRound(y0 - 1000*(a));

line(dstImage, pt1, pt2, Scalar(100,100,195));

}

self.secondImageView.image = MatToUIImage(dstImage);

效果

累计概率霍夫变换函数:HoughLinesP() 函数

void HoughLinesP( InputArray image,

OutputArray lines,

double rho,

double theta,

int threshold,

double minLineLength = 0,

double maxLineGap = 0

);

参数详解

代码实现

NSString *image = @"xixi.jpg";

UIImage *image1 = [UIImage imageNamed:image];

Mat im;

UIImageToMat(image1, im);

if (im.empty()) {                return;    }

// 创建零时变量

Mat midImage,dstImage;

// 进行边缘检测和转换为灰度图

Canny(im, midImage, 50, 200,3);

cvtColor(midImage, dstImage, CV_GRAY2BGR);

std::vector<Vec4i>lines;// 定义一个矢量lines,存放得到的线段矢量集合

HoughLinesP(midImage,lines, 1,CV_PI/180, 80, 50, 10);

for (size_t i = 0; i < lines.size(); i++) {

Vec4i l = lines[i];

line(dstImage, cv::Point(l[0],l[1]),cv::Point(l[2],l[3]) , Scalar(186,88,255),1,LINE_AA);

}

self.secondImageView.image = MatToUIImage(dstImage);

效果

霍夫变换概述和标准霍夫变换相关推荐

  1. 基于matlab的霍夫变换,基于matlab的霍夫变换

    MATLAB 三维绘图功能 Plot3函数(三维曲线图) Mesh函数(网格图) Surf函数(曲面...步骤: 1.利用hough()函数执行霍夫变换,得到霍夫矩阵; 2.利用houghpeaks( ...

  2. 9.广义霍夫变换——介绍、广义霍夫变换步骤、实例_1

    目录 介绍 广义霍夫变换步骤 建立霍夫表 识别步骤 广义霍夫变换实例 介绍 今天我们要做的是用两个重要的变化来结束今天的学习. 第一个是我们将使用非解析模型.(参数表示固定或任意形状的姿态或尺度的变化 ...

  3. 霍夫变换c语言程序,霍夫变换 | Cauthy's Blog

    最早接触霍夫变换(Hough Transform )[4,5,6,7,8]就是用在检测直线,大四的时候用来分割ROI用的,原理看起来很简单. 一.检测直线 直线y=k*x+b上一点(x0,y0),满足 ...

  4. matlab霍夫变换检测直线原理,霍夫变换(霍夫变换检测直线原理)

    OpenCv里面有个概率霍夫变换,但是不知道原理是什么,请各位大侠指教!.. 霍夫变换就是利用参数空间中的(ρ,θ)来表示一条直线,其中ρ是原点到直线的垂直距离,θ是原点到直线的一条垂线段与θ的夹角. ...

  5. OpenCV图像处理学习十八,霍夫变换实现交通车道线检测

    一.霍夫变换 经典霍夫变换用来检测图像中的直线,后来霍夫变换经过扩展可以进行任意形状物体的识别,例如圆和椭圆.霍夫变换运用两个坐标空间之间的变换,将在一个空间中具有相同形状的曲线或直线映射到另一个坐标 ...

  6. 霍夫(圆)变换(hough Transform/hough cirlce Transform)原理和实现

    一.霍夫(圆)变换的广泛使用和简要历史 霍夫变换是一种特征提取方法,被广泛应用在图像处理和计算机视觉应用中.霍夫变换是用来辨别找出物件中的特征,例如:线条.他的算法流程大致如下,给定一个物件.要辨别的 ...

  7. 【时钟识别】基于matlab GUI Hough变换指针式时钟识别【含Matlab源码 2085期】

    ⛄一.简介 1 仪表示数识别流程 基于刻度准确定位的指针式仪表示数识别方法包括预处理.指针检测.刻度定位.油位计表盘中心拟合与仪表读数计算5个部分.该方法无需预先添加任何表盘信息,算法流程如图2所示. ...

  8. 《OpenCV3编程入门》学习笔记7 图像变换(二 )霍夫变换

    7.2 霍夫变换 7.2.1 概述 1.特征提取技术,运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间的一个点上形成峰值,从而把检测任意形状的问题转化为统计峰值问题 ...

  9. 边缘检测、霍夫变换、重映射、仿射变换、直方图均衡化

    文章目录 1.基于 OpenCV 的边缘检测 1.1 边缘检测的一般步骤 1.2 canny 算子 1.2.1 canny 边缘检测的步骤 1.2.2 Canny 边缘检测:Canny() 函数 1. ...

最新文章

  1. Java的学习之路(1)
  2. java(十六) 对象的this引用
  3. UA OPTI512R 傅立叶光学导论14 Wiener-Khinchine定理,Rayleigh定理与矩定理
  4. Math(牛客多校第三场)
  5. Python 内置模块之 时间模块 time
  6. windows下修改host不生效的解决方法
  7. DataTable增加行
  8. Angular在FormGroup中使用ngModel失效报错问题的解决办法
  9. pandas数据处理实践三(DataFrame.apply、merge、rename,数据预处理、DataFrame.drop_duplicates去重)
  10. No toolchains found in the NDK toolchains folder for ABI with prefix: mips64
  11. 英特尔核显自定义分辨率_让图像更精彩 英特尔核显如何设置
  12. [历年IT笔试题]美团2015校园招聘笔试题
  13. 一些可供参考的游戏出海技术架构与经验总结
  14. dingo php,Laravel Lumen RESTFul API 扩展包:Dingo API(一) —— 安装配置篇
  15. matlab如何寻找兼职
  16. iframe嵌入通讯
  17. 傅盛:最可怕的不是把事情做差,而是越做越好后被淘汰
  18. C#双色球——简单抽取中奖号码
  19. linux系统有哪些版本 linux系统哪个版本好用
  20. 【腾讯 macOS 优质看图工具】Kantu(看图) V2.4 Mac 正式版

热门文章

  1. AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别
  2. (0093)iOS开发自己账号跑真机报错:conflicting provisioning
  3. php从ftp下载文件到本地,php使用ftp实现文件上传与下载功能
  4. python增删改查的框架_python的Web框架,Django的ORM,模型基础,MySQL连接配置及增删改查...
  5. Android证书通过keytool获取sha1、sha256、MD5
  6. scipy 图像处理-深度学习
  7. 2018 年中国科学院大学生数学夏令营试题
  8. bootstrap datatimepicker 汉化
  9. 一个Web页面的问题分析
  10. UITableView 关键操作