绪:
若何检测和识别图像中的直线和圆?
一个很是有用的方式就是霍夫变换;
是图像中识别各类几何外形的根基算法之一;
【OpenCV:霍夫变换HoughLines vs HoughCircles】本文介绍一下opencv中的霍夫线变换和霍夫圆变换的应用 。
文章插图
需要这些哦
OpenCV 2410
方式/
1霍夫线变换:
霍夫线变换是一种在图像中寻找直线的方式;
OpenCV中撑持三种霍夫线变换, 别离为尺度霍夫线变换、多标准霍夫线变换、累计概率霍夫线变换 。
在OpenCV中可以挪用HoughLines来进行尺度霍夫线变换和多标准霍夫线变换;
挪用HoughLinesP函数进行累积概率霍夫线变换 。
文章插图
2霍夫直线思惟:
我们都知道,
二维坐标轴上暗示一条直线的方程式y = a*x + b,
我们想求出一条直线就得想方设法求出此中的a和b的值 。
若是用极坐标来暗示就是:rho=xcos(theta)+ysin(theta);
此中,
theta就是直线与程度线所当作的角度,
而rho就是圆的半径;
同样地, 这两个参数也是表征一条直线的主要参数,
确定他们俩了, 也就确定一条直线了 。
【注】:
OpenCV里, 只需挪用HoughLines就可获得表征一条直线的这两个参数值!
3霍夫直线检测示例一:HoughLines
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\features2d\features2d.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = imread("0.jpg");
imshow("srcImg", srcImage);
//边缘检测
Mat midImage, dstImage;
Canny(srcImage, midImage, 50, 200, 3);
cvtColor(midImage, dstImage, CV_GRAY2BGR);
//界说矢量布局存放检测出来的直线
vector<Vec2f> lines;
HoughLines(midImage, lines, 1, CV_PI / 180, 150, 0, 0);
//第五个参数表阈值,阈值越年夜检测越精准速度越快直线越少
//lines是包含rho和theta的, 而不包罗直线上的点,
//所以下面需要按照获得的rho和theta来成立一条直线
//依次画出每条线段
for (size_t i = 0; i < lines.size(); i++)
{
float rho = lines[i][0]; //就是圆的半径r
float theta = lines[i][1]; //就是直线的角度
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
推荐阅读
- OpenCV:图像缩放操作resize,pryUp,pryDown
- OpenCV:重映射remap vs仿射变换warpAffine
- OpenCV:区域生长法实现
- OpenCV:calcHist计算图像直方图
- OpenCV例程:针对对比度差的图像,目标分割方法
- OpenCV:widthStep vs step
- OpenCV:TermCriteria迭代终止条件
- OpenCV:xml文件的读取与写入
- OpenCV:waitKey函数
- OpenCV:resize函数 VS vector:resize函数