OpenCV——霍夫变换(直线检测、圆检测)
x



#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h> using namespace cv;
using namespace std; int main(int argc, char** argv)
{
Mat src, src_gray, dst;
src = imread("test1.jpg"); char INPUT_TITLE[] = "input image"; imshow(INPUT_TITLE, src); Canny(src, src_gray, , );
cvtColor(src_gray, dst, CV_GRAY2BGR);
imshow("edge image", src_gray);
imshow("gray", dst); //方法1(标准霍夫变换)
//vector<Vec2f> lines;
//HoughLines(src_gray, lines, 1, CV_PI / 180, 150, 0, 0);
//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;
// // 转换为平面坐标的四个点
// pt1.x = cvRound(x0 + 1000 * (-b));//对一个double型的数进行四舍五入,并返回一个整型数!
// pt1.y = cvRound(y0 + 1000 * (a));
// pt2.x = cvRound(x0 - 1000 * (-b));
// pt2.y = cvRound(y0 - 1000 * (a));
// line(dst, pt1, pt2, Scalar(0, 0, 255), 1, CV_AA);
//} //第二种方法(概率霍夫变换)
vector<Vec4f> plines;
HoughLinesP(src_gray, plines, , CV_PI / 180.0, , , );
Scalar color = Scalar(, , );
for (size_t i = ; i < plines.size(); i++) {
Vec4f hline = plines[i];
line(dst, Point(hline[], hline[]), Point(hline[], hline[]), color, , LINE_AA);
} imshow("效果图",dst); waitKey();
return ; }




#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h> using namespace cv;
using namespace std; int main(int argc, char** argv)
{
Mat src, src_gray;
src = imread("3 input.bmp"); char INPUT_TITLE[] = "input image"; imshow(INPUT_TITLE, src); //转成灰度图
cvtColor(src, src_gray, COLOR_BGR2GRAY);
GaussianBlur(src_gray, src_gray, Size(, ), , ); //进行霍夫圆变换
vector<Vec3f> circles;
HoughCircles(src_gray, circles, HOUGH_GRADIENT, 1.5, , , , , ); for (size_t i = ; i < circles.size(); i++)
{
Point center(cvRound(circles[i][]), cvRound(circles[i][]));
int radius = cvRound(circles[i][]);
//绘制圆心
circle(src, center, , Scalar(, , ), -, , );
//绘制圆的轮廓
circle(src, center, radius, Scalar(, , ), , , ); } imshow("效果图", src); waitKey();
return ; }
霍夫圆检测一般只会找出最大的一个圆
OpenCV——霍夫变换(直线检测、圆检测)的更多相关文章
- OpenCV 学习笔记03 直线和圆检测
检测边缘和轮廓不仅重要,还经常用到,它们也是构成其他复杂操作的基础. 直线和形状检测与边缘和轮廓检测有密切的关系. 霍夫hough 变换是直线和形状检测背后的理论基础.霍夫变化是基于极坐标和向量开展的 ...
- 【python+opencv】直线检测+圆检测
Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...
- opencv::霍夫变换-直线
霍夫直线变换介绍 Hough Line Transform用来做直线检测 前提条件 – 边缘检测已经完成 平面空间到极坐标空间转换 对于任意一条直线上的所有点来说,变换到极坐标中,从[0~360]空间 ...
- opencv:霍夫圆检测
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- opencv python:直线检测 与 圆检测
霍夫直线变换介绍 霍夫圆检测 现实中: example import cv2 as cv import numpy as np # 关于霍夫变换的相关知识可以看看这个博客:https://blog.c ...
- opencv学习笔记霍夫变换——直线检测
参考大佬博文:blog.csdn.net/jia20003/article/details/7724530 lps-683.iteye.com/blog/2254368 openCV里有两个函数(比较 ...
- 【CImg】霍夫变换——直线检测
霍夫变换——直线检测 考古debug,其实很久之前就解决的bug......一直忘记过来改文章....欸 =============================原文================ ...
- hough变换检测直线和圆
图像测量和机器视觉作业: 提取图像中的直线和点的位置坐标,将其按一定顺序编码存入一文本文件,并在原图像上叠加显示出来. 下午实验了一下: 程序环境:vs2013(活动平台为x64)+opencv3.1 ...
- hough变换是如何检测出直线和圆的?
(I)直线篇 1 直线是如何表示的?对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法.然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线. ...
随机推荐
- C#生成二维码,裁切边框
使用google zxing生成的二维码带有白色边框,显示在报告(使用Crystal Report 水晶报表)上时,由于空间有限造成二维码过小难以扫描识别. 通过将白色边框裁切掉,可以在有限的空间内最 ...
- 服务注册中心Eureka vs Zookeeper vs Consul
前言 在现在云计算和大数据快速发展的今天,业务快速发展和变化.我们以前的单一应用难以应对这种快速的变化, 因此我们需要将以前单一的大应用不断进行差分,分成若干微小的应用或者服务,这就是微服务的思想.但 ...
- BZOJ4806(SummerTrainingDay03-K dp)
炮 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 464 Solved: 243[Submit][Status][Discuss] Descript ...
- js-ES6学习笔记-变量的解构赋值
1.ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 2.ES6允许写成:let [a,b,c] = [1,2,3];上面代码表示,可以从数 ...
- php将多个值的数组去除重复元素
array_unique(array) 只能处理value只有单个的数组. 去除有多个value数组,可以使用如下函数实现: function more_array_unique($arr=array ...
- ActiveReports 报表应用教程 (13)---嵌入第三方控件
葡萄城ActiveReports报表与Visual Studio完美集成,给我们带来更为灵活易用的报表定制和自定义控件嵌入支持,除了可以在报表中使用葡萄城ActiveReports报表内置控件外,您还 ...
- 学习MVC之租房网站(十二)-缓存和静态页面
在上一篇<学习MVC之租房网站(十一)-定时任务和云存储>学习了Quartz的使用.发邮件,并将通过UEditor上传的图片保存到云存储.在项目的最后,再学习优化网站性能的一些技术:缓存和 ...
- java实现文件复制粘贴功能
java编程思想中讲到了IO流的思想,以前对于java基础总是不够深入,浅尝辄止,如今碰到语句插桩的时候就感到书到用时方恨少啊! 文件的复制涉及到源文件和新文件(无需手动创建),给出源文件的路径和文件 ...
- 使用IDEA创建Java Web项目并部署
前面给大家介绍了IDEA的安装和基本配置,睡觉前Alan再给大家分享一下使用IDEA创建Java Web并部署访问. 打开IDEA,File>New>Project,进入Java Ente ...
- 树莓派Pi2 使用入门
1. 材料和环境 树莓派Pi2, microSD卡(大于等于4G), 网线 官网下载: 系统镜像 Raspbian Jessie (https://downloads.raspberrypi.org/ ...