OpenCV霍夫变换

简介: 笔记

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


c++:
void HoughLines(InputArray src,OutputArray lines,double rho,double theta,
int threshold,double srn=0,double= stn = 0)
1. 第一个参数: 输入的图片
2. 第二个参数:储存霍夫变换检测到线条的输出矢量
3. 第三个参数: 以像素为单位的距离精度
4. 第四个参数: 以弧度为单位的角度精度
5. 第五个参数:累加平面的阈值参数
6. 第六、七个参数:默认为0

2.程序示例

#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(void)
{
  Mat srcImage = imread("1.jpg");
  Mat midImage,dstImage;
  Canny(srcImage,midImage,50,200,3);
  cvtColor(midImage,dstImage,COLOR_GRAY2BGR);
  vector<Vec2f> lines;
  HoughLines(midImage,lines,1,CV_PI/180,150,0,0);
  for(size_t i=0;i<lines.size();i++)
  {
    float rho = lines[i][0],theta = lines[i][1];
    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(55,100,123),1,LINE_AA);
  }
  imshow("AA",dstImage);
  waitKey(0);
  return 0;
}

二. 累计概率霍夫变换:HoughLinesP()


1.函数说明

c++
void HoughLinesP(InputArray src,OutputArray lines,double rho,double theta,
int threshold,double minLineLength=0,double maxLineGap=0)
1. 参数一:输入图片
2. 参数二:检测到的线条输出矢量
3. 参数三:以像素为单位的距离精度
4. 参数四:以距离为单位的角度精度
5. 参数五:累加平面的阈值参数
6. 参数六:最低线段的长度
7. 参数七:同一行点与点之间连接起来的最大距离

2.程序示例

#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(void)
{
  Mat srcImage = imread("1.jpg");
  Mat midImage,dstImage;
  Canny(srcImage,midImage,50,200,3);
  cvtColor(midImage,dstImage,COLOR_GRAY2BGR);
  vector<Vec4i> 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,Point(l[0],[1]),Point(l[2],l[3]),Scalar(186,88,255),1,LINE_AA); 
  }
  imshow("AA",dstImage);
  waitKey(0);
  return 0;
}

三. 霍夫圆变换: HoughCircles()


1.函数说明

c++:
void HoughCircles(IntputArray image,OutputArray circles,int method,double dp,
double minDist,double param1=100,double param2 = 100,int minRadius=0,int maxRadius=0)
1. 参数一:输入图片
2. 参数二:检测到圆的输出矢量(x,y,raduis)
3. 参数三:检测的方法,只能用HOUGH_GRADENT
4. 参数四:用来检测圆心的累加器图像的分辨率与输入图像之比的倒数
5. 参数五:圆心与圆心直接的最小距离
6. 参数六、七:默认
7. 参数八、九:表圆半径的最大、最小值

2.程序示例

#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(void)
{
  Mat srcImage = imread("1.jpg");
  Mat midImage,dstImage;
  cvtColor(srcImage,midImage,COLOR_BGR2GRAY);
  GaussianBlur(midImage,midImage,Size(9,9),2,2);
  vector<Vec3f> circles;
  HoughCircles(midImage,circles,HOUGH_GRADIENT,1.5,10,200,100,0,0);
  for(size_t i = 0;i<circles.size();i++)
  {
    Point center(cvRound(circles[i][0]),cvRound(circles[i][1]));
    int radius = cvRound(circles[i][2]);
    circle(srcImage,center,3,Scalar(0,255,0),-1,8,0);
    circle(srcImage,center,radius,Scalar(155,50,255),3,8,0);
  }
  imshow("A",srcImage);
  waitKey(0);
  return 0;
}

Thank for your reading!!!


公众号:FPGA之旅

目录
相关文章
|
1月前
|
算法 计算机视觉 Python
OpenCV中Canny边缘检测和霍夫变换的讲解与实战应用(附Python源码)
OpenCV中Canny边缘检测和霍夫变换的讲解与实战应用(附Python源码)
151 0
|
8月前
|
存储 计算机视觉
OpenCV-累计概率霍夫变换cv::HoughLinesP
OpenCV-累计概率霍夫变换cv::HoughLinesP
|
8月前
|
存储 计算机视觉
OpenCV-标准霍夫变换cv::HoughLines
OpenCV-标准霍夫变换cv::HoughLines
|
11月前
|
编解码 算法 计算机视觉
【OpenCV • c++】几何检测 —— 霍夫变换 | 霍夫直线检测 | 霍夫线变化
【OpenCV • c++】几何检测 —— 霍夫变换 | 霍夫直线检测 | 霍夫线变化
315 0
|
编解码 算法 计算机视觉
霍夫变换---OpenCV-Python开发指南(35)
霍夫变换---OpenCV-Python开发指南(35)
199 0
霍夫变换---OpenCV-Python开发指南(35)
|
算法 Serverless API
OpenCV 霍夫变换——圆
OpenCV 霍夫变换——圆
190 0
OpenCV 霍夫变换——圆
|
API 计算机视觉 开发者
OpenCV 霍夫变换——直线
OpenCV 霍夫变换——直线
182 0
OpenCV 霍夫变换——直线
|
算法 计算机视觉 索引
霍夫变换看不懂?小啾带你串一遍:OpenCV图形检测专题 这样学最简单【Python-Open_CV系列(十一)】(上)
霍夫变换看不懂?小啾带你串一遍:OpenCV图形检测专题 这样学最简单【Python-Open_CV系列(十一)】
411 0
霍夫变换看不懂?小啾带你串一遍:OpenCV图形检测专题 这样学最简单【Python-Open_CV系列(十一)】(上)
|
编解码 算法 计算机视觉
霍夫变换看不懂?小啾带你串一遍:OpenCV图形检测专题 这样学最简单【Python-Open_CV系列(十一)】(下)
霍夫变换看不懂?小啾带你串一遍:OpenCV图形检测专题 这样学最简单【Python-Open_CV系列(十一)】
239 0
霍夫变换看不懂?小啾带你串一遍:OpenCV图形检测专题 这样学最简单【Python-Open_CV系列(十一)】(下)
|
计算机视觉
OpenCV使用霍夫变换检测图像中的形状
霍夫变换是一种被广泛使用的利用数学等式的参数形式在图像中检测形状的技术。 例如直线、椭圆、圆等形状。
1309 0