参考:https://docs.opencv.org/3.4.5/d9/db0/tutorial_hough_lines.html
参考:https://docs.opencv.org/3.4.5/d4/d70/tutorial_hough_circle.html
若有表达不当或错误欢迎留言指正,互相交流学习,共同进步,目前还在学习,没有过多纠结于原理问题,日后有机会补充
目标
在本教程中,您将学习如何:
- 使用OpenCV函数HoughLines()和HoughLinesP()来检测图像中的线条。
- 使用OpenCV函数HoughCircles()来检测图像中的圆圈。
原理
参考官方文档:https://docs.opencv.org/3.4.5/d9/db0/tutorial_hough_lines.html
源码
霍夫线变换
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
using namespace cv;
using namespace std;
int main()
{
//
VideoCapture capture(0); //
//【2】循环显示每一帧 //
while (1) //
{
//
Mat image; //定义一个Mat变量,用于存储每一帧的图像 //
capture >> image; //读取当前帧 //
//================================================================
Mat gray = image.clone();
Mat dst = image.clone();
Mat cdst = image.clone();
Mat cdstP;
int kernel_size = 3;
int ratio = 4;
double lowThreshold = 50;
cvtColor(image, gray, CV_BGR2GRAY);//转化成灰度图像
Canny(gray, dst, lowThreshold, lowThreshold*ratio, kernel_size);
cvtColor(dst, cdst, COLOR_GRAY2BGR);
cdstP = cdst.clone();
vector<Vec2f> lines;
HoughLines(dst, 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