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——霍夫变换(直线检测、圆检测)的更多相关文章

  1. OpenCV 学习笔记03 直线和圆检测

    检测边缘和轮廓不仅重要,还经常用到,它们也是构成其他复杂操作的基础. 直线和形状检测与边缘和轮廓检测有密切的关系. 霍夫hough 变换是直线和形状检测背后的理论基础.霍夫变化是基于极坐标和向量开展的 ...

  2. 【python+opencv】直线检测+圆检测

     Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...

  3. opencv::霍夫变换-直线

    霍夫直线变换介绍 Hough Line Transform用来做直线检测 前提条件 – 边缘检测已经完成 平面空间到极坐标空间转换 对于任意一条直线上的所有点来说,变换到极坐标中,从[0~360]空间 ...

  4. opencv:霍夫圆检测

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...

  5. opencv python:直线检测 与 圆检测

    霍夫直线变换介绍 霍夫圆检测 现实中: example import cv2 as cv import numpy as np # 关于霍夫变换的相关知识可以看看这个博客:https://blog.c ...

  6. opencv学习笔记霍夫变换——直线检测

    参考大佬博文:blog.csdn.net/jia20003/article/details/7724530 lps-683.iteye.com/blog/2254368 openCV里有两个函数(比较 ...

  7. 【CImg】霍夫变换——直线检测

    霍夫变换——直线检测 考古debug,其实很久之前就解决的bug......一直忘记过来改文章....欸 =============================原文================ ...

  8. hough变换检测直线和圆

    图像测量和机器视觉作业: 提取图像中的直线和点的位置坐标,将其按一定顺序编码存入一文本文件,并在原图像上叠加显示出来. 下午实验了一下: 程序环境:vs2013(活动平台为x64)+opencv3.1 ...

  9. hough变换是如何检测出直线和圆的?

    (I)直线篇 1 直线是如何表示的?对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法.然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线. ...

随机推荐

  1. Vue之组件使用(二)

    补充一下:之前没提到,这里是一个父子组件通信的方法 如果想要使同一个组件实现不同的效果,那么可以这样做. 把需要封装的组件模板写在template中 <template id="cou ...

  2. SpingBoot —— RestTemplate的配置

    背景:最近工作上搭建了一个中间系统,采用了RestTemplate框架调用第三系统restful接口,调用方采用轮询的方式调用本系统的相关接口,期间多次出现堆内存溢出,系统假死,通用java自带的ja ...

  3. [翻译]C# BAD PRACTICES: Learn how to make a good code by bad example---C#:如何将坏的代码重新编译为好的代码

    自己的前言说明: 本文原作者:Radoslaw Sadowski,原文链接为:C# BAD PRACTICES: Learn how to make a good code by bad exampl ...

  4. HDU2167(SummerTrainingDay02-D 状态压缩dp)

    Pebbles Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  5. DRF序列化

    1. 安装 pip install djangoframework 2. app注册 rest_framework INSTALLED_APPS = [ 'django.contrib.admin', ...

  6. 集合框架三(List和Set的补充(不加泛型))

    List List存放的元素有序,可重复 List list = new ArrayList(); list.add("123"); list.add("456" ...

  7. 活字格Web应用平台学习笔记4 - 添加记录

    今天继续学习活字格基础教程,目标是创建一个页面,增加记录. 开始之前,系统会自动把上一次的工程文件加载进来. 这是做好后的样子. 我点添加员工的超链接: 先后加了2条员工的信息进来. 不错,设计界面是 ...

  8. MySql UNIX_TIMESTAMP和FROM_UNIXTIME函数讲解

    MySql UNIX_TIMESTAMP和FROM_UNIXTIME函数讲解 by:授客 QQ:1033553122 1. unix_timestamp(date)将时间转换为时间戳,如果参数为空,则 ...

  9. 使用Git上传代码到Github仓库

    准备工作: 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址,下载后一路直接安装即可: http ...

  10. JSON教程基础

    一.基础简介 二.JSON 语法 三.JSON 使用 一.基础简介 1.JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本 ...