今天将opencv的霍夫变换修改并优化了一下,就是先预处理,切割、二值化、去噪之后进行霍夫变换,效果还不错,从识别70多个圆,慢慢修改到识别32个圆。
效果如下:

原理毛星云写的就很好,他的文章链接:https://blog.csdn.net/poem_qianmo/article/details/26977557
下面附上代码:

#include "stdafx.h"
#include "core/core.hpp"
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <set>
#include<stdio.h>#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/videoio.hpp>//for camera
#include <opencv2/video.hpp>
#include <opencv2/ml/ml.hpp>
#include "opencv2/ml/ml.hpp"
#include <time.h>
#include <ctime>
#include <string>
using namespace std;
using namespace cv;
//-----------------------------------【命名空间声明部分】---------------------------------------
//      描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------   //-----------------------------------【main( )函数】--------------------------------------------
//      描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main()
{//【1】载入原始图和Mat变量定义     Mat srcImage = imread("3.jpg");  //工程目录下应该有一张名为1.jpg的素材图  Mat midImage, dstImage;//临时变量和目标图的定义  //【2】显示原始图  namedWindow("【原始图】", 0);//参数为零,则可以自由拖动imshow("【原始图】", srcImage);Rect rect(600, 0, 1205, 1035);   //创建一个Rect框,属于cv中的类,四个参数代表x,y,width,height  Mat image_cut = Mat(srcImage, rect);      //从img中按照rect进行切割,此时修改image_cut时image中对应部分也会修改,因此需要copy  Mat image_copy = image_cut.clone();   //clone函数创建新的图片  namedWindow("分割后的图片", 0);//参数为零,则可以自由拖动imshow("分割后的图片", image_copy);//【3】转为灰度图,进行图像平滑  cvtColor(image_copy, midImage, CV_BGR2GRAY);//灰度化//二值化threshold(midImage, midImage, 128, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);//使用3*3内核来降噪blur(midImage, midImage, Size(3, 3));//进行模糊//GaussianBlur(midImage, midImage, Size(9, 9), 2, 2);//Rect rect(600,0, 1205, 1035);   //创建一个Rect框,属于cv中的类,四个参数代表x,y,width,height  //Mat image_cut = Mat(midImage, rect);      //从img中按照rect进行切割,此时修改image_cut时image中对应部分也会修改,因此需要copy  //Mat image_copy = image_cut.clone();   //clone函数创建新的图片  //namedWindow("分割后的图片", 0);//参数为零,则可以自由拖动//imshow("分割后的图片", image_copy);//【4】进行霍夫圆变换  vector<Vec3f> circles;
//  HoughCircles(midImage, circles, CV_HOUGH_GRADIENT, 1.5, 10, 200, 100, 0, 0);//      第五个参数   圆的圆心之间的最小距离HoughCircles(midImage, circles, CV_HOUGH_GRADIENT, 1.5, 35, 100, 25, 36, 43);//【5】依次在图中绘制出圆  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]);cout << "圆心  " << i << "= " << center << ";\n" << endl;cout << "半径= " << i << "= " << radius << ";\n" << endl;//绘制圆心  circle(midImage, center, 3, Scalar(0, 255, 0), -1, 8, 0);//绘制圆轮廓  circle(midImage, center, radius, Scalar(155, 50, 255), 3, 8, 0);//绘制圆心  circle(image_copy, center, 3, Scalar(0, 255, 0), -1, 8, 0);//绘制圆轮廓  circle(image_copy, center, radius, Scalar(155, 50, 255), 3, 8, 0);}cout << "共检测到圆" << circles.size() << " 个圆" << ";\n" << endl;//【6】显示效果图    namedWindow("【二值化后效果图】", 0);//参数为零,则可以自由拖动imshow("【二值化后效果图】", midImage);namedWindow("【彩色效果图】", 0);//参数为零,则可以自由拖动imshow("【彩色效果图】", image_copy);waitKey(0);return 0;
}

利用opencv霍夫变检测中国象棋的外形——圆相关推荐

  1. OpenCV霍夫圈检测Hough Circle Detection的实例(附完整代码)

    OpenCV霍夫圈检测Hough Circle Detection的实例 OpenCV霍夫圈检测Hough Circle Detection的实例 OpenCV霍夫圈检测Hough Circle De ...

  2. OpenCV霍夫直线检测的实例(附完整代码)

    OpenCV霍夫直线检测的实例 OpenCV霍夫直线检测的实例 OpenCV霍夫直线检测的实例 #include <opencv2/imgproc.hpp> #include <op ...

  3. OpenCV 霍夫线检测

    实现流程 假设有一个大小为100*∗100的图片,使用霍夫变换检测图片中的直线,则步骤如下所示: 直线都可以使用(ρ,θ) 表示,首先创建一个2D数组,我们叫做累加器,初始化所有值为0,行表示ρ,列表 ...

  4. opencv 霍夫直线检测

    cv.HoughLinesP(img,lines,rho,theta,thresold) 参数 描述 img 输入图像 lines 输出直线的坐标 rho 像素每次迭代的大小(每一次选取像素的过程跳跃 ...

  5. QT+opencv学习笔记(5)——霍夫直线检测、圆检测及椭圆检测

    开发环境为:win10+QT5.8+opencv3.2 Hough变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛.最基本的Hough变换是从黑白图像中检测直线,还可以经过改进检测圆.椭 ...

  6. OpenCV标准霍夫直线检测详解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:OpenCV学堂 霍夫直线检测 对于图像来说可以从笛卡 ...

  7. android openCV检测图像的基本特征,包括Canny边缘检测、Harris角点检测、霍夫直线检测-基于Android studio

    实现平台:windows下的Android studio1.4 依赖库:openCV3.1.0 程序安装平台:Android6.0 实现的功能:从手机中选择一张图片,检测图片的基本特征,通过menu菜 ...

  8. Android OpenCV(三十二):霍夫直线检测

    霍夫变换利用点与线之间的对偶性,将图像空间中直线上离散的像素点通过参数方程映射为霍夫空间中的曲线,并将霍夫空间中多条曲线的交点作为直线方程的参数映射为图像空间中的直线.给定直线的参数方程,可以利用霍夫 ...

  9. c++版本opencv(36.霍夫直线检测37.直线类型与线段-)

    c++版本opencv(36.霍夫直线检测37.直线类型与线段-) 一.36.霍夫直线检测- 二,37.直线类型与线段- 来自网易云课堂贾志刚老师 一.36.霍夫直线检测- 同一条直线上的点,r和c塔 ...

最新文章

  1. Visual Studio Code 保存代码时报Applying code action Organize Imports
  2. 【转】10分钟精通SharePoint - VS开发模板
  3. 看看大货车到底有多少盲区,肯定用得到!救命的!
  4. linux端口混杂模式,linux端口混杂模式简介~
  5. matlab与水库调度,蛙跳算法优化水库调度,全局迭代中最优解未更新
  6. 在有空字符串的有序字符串数组中查找(找给定字符串)
  7. airtest 多设备同时运行_AirTest多设备批量运行测试用例并自动生成测试报告
  8. Amos24程序安装及注意事项
  9. Vue使用Iconfont图标库
  10. 使用微信实现查卷返利机器人功能
  11. Camtasia如何给视频或者图片调色
  12. 斗破特别篇美杜莎建模赏析文
  13. 语音通信64K的由来
  14. 两台计算机如何打印机共享打印机,多台电脑怎样共享一台打印机?方法就是这么简单!...
  15. PR学习笔记——Pr2019快速使用指南——视频剪辑
  16. 微信开放JS SDK,再次给浏览器们上了一课
  17. 记一次阿拉伯数字转中文的JavaScript实现
  18. (更新时间)2021年6月4日 商城高并发秒杀系统(.NET Core版) 30-lua文件封装加载和执行
  19. html5 replace,js replace函数用法详解
  20. 【自动驾驶汽车技术 | 车载雷达系统】

热门文章

  1. Autohotkey实现快捷键切换鼠标左右手设置
  2. c语言占八个字节的浮点数是,『double转八字节十六进制』double占8字节 一个数字占1字节 为什么能精确16位 我觉得只有8位,,,...
  3. ipcs 查看IPC 对象信息
  4. 区块链共识机制:POW、POS、DPOS、PBFT、POOL
  5. 形状上下文(shape context)算法完全解读
  6. App内测神器之蒲公英--类似 testFlight fir.im
  7. 最新机器人工程专业毕设选题推荐
  8. 鸿蒙是几纳米的,曝鸿蒙+5纳米+新一代5G华为Mate40,华为Mate30价格爆降强弩之末...
  9. 机器学习之数学原理笔记(四)
  10. android解析pdf文件muPdf