iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++利用Opencv实现多个圆形检测
  • 291
分享到

C++利用Opencv实现多个圆形检测

C++Opencv圆形检测C++原型检测 2022-11-13 14:11:30 291人浏览 独家记忆
摘要

主要是利用霍夫圆检测、面积筛选等完成多个圆形检测,具体代码及结果如下。 第一部分是头文件(common.h): #pragma once #include<OpenCV2/op

主要是利用霍夫圆检测、面积筛选等完成多个圆形检测,具体代码及结果如下。

第一部分是头文件(common.h):

#pragma once
#include<OpenCV2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include<iOStream>
using namespace std;
using namespace cv;
extern Mat src;
void imageBasicInfORMation(Mat& src);//图像基本信息
const Mat houghCirclePre(Mat& srcPre);//霍夫圆检测预处理
void  houghCircle(Mat& srcPreHough);//霍夫圆检测
const Mat RectCirclePre(Mat& srcPre);//面积筛选拟合圆的预处理
void AreaCircles(Mat& Areainput);//面积筛选拟合圆检测

第二部分是主函数:

#include"common.h"
Mat src;
int main()
{
    src = imread("1.jpg",1);
    if (src.empty())
    {
        cout << "图像不存在!" << endl;
    }
    else
    {
        namedWindow("原图", 1);
        imshow("原图", src);
        imageBasicInformation(src);
        Mat srcPreHough = houghCirclePre(src);
        houghCircle(srcPreHough);
        Mat RectCir = RectCirclePre(src);
        AreaCircles(RectCir);
        waiTKEy(0);
        destroyAllwindows();
    }
    return 0;
}

第三部分为霍夫圆检测函数(hough.cpp)

主要包括输出图像的基本信息函数:void imageBasicInformation(Mat& src)

霍夫圆检测预处理函数:const Mat houghCirclePre(Mat& srcPre)

霍夫圆检测函数:void houghCircle(Mat& srcPreHough)

#include"common.h"
Mat graySrc, srcPre;//灰度图,霍夫检测预处理,
Mat threshold_grayaSrc;//二值化图
Mat erode_threshold_graySrc, dilate_threshold_graySrc;//二值化后腐蚀,二值化后膨胀
void imageBasicInformation(Mat& src)
{
    int cols = src.cols;
    int rows = src.rows;
    int channels = src.channels();
    cout << "图像宽为:" << cols << endl;
    cout << "图像高为:" << rows << endl;
    cout << "图像通道数:" << channels << endl;
}
const Mat houghCirclePre(Mat& srcPre)
{
    double houghCirclePreTime = static_cast<double>(getTickCount());

    cvtColor(srcPre, graySrc, COLOR_BGR2GRAY);
    GaussianBlur(graySrc, graySrc, Size(3, 3), 2, 2);//滤波
    threshold(graySrc, threshold_grayaSrc, 150, 255, 1);//二值化
    Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
    dilate(threshold_grayaSrc, dilate_threshold_graySrc, element);//膨胀
    erode(dilate_threshold_graySrc, erode_threshold_graySrc, element);//腐蚀
    houghCirclePreTime = ((double)getTickCount() - houghCirclePreTime) / getTickFrequency();
    cout << "霍夫圆预处理时间为:" << houghCirclePreTime << "秒" << endl;
    return erode_threshold_graySrc;
}
void houghCircle(Mat& srcPreHough)
{
    cout << "进入霍夫圆检测" << endl;
    vector<Vec3f> circles;
    HoughCircles(srcPreHough, circles, HOUGH_GRADIENT, 1, 60, 1, 35, 0, 0);
    cout << "圆的个数" << circles.size() << endl;
    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]);
        circle(src, center, 3, Scalar(0, 255, 0), -1, 8, 0);//画圆心
        circle(src, center, radius, Scalar(0, 0, 255), 3, 8, 0);//画圆
    }
    namedWindow("霍夫检测结果", 0);
    imshow("霍夫检测结果", src);
    imwrite("霍夫圆检测结果.jpg", src);//保存检测结果
}

第四部分为利用面积筛选拟合圆检测(AreaCircle.cpp)

主要包括预处理函数:const Mat RectCirclePre(Mat& srcPre)

面积筛选拟合圆检测函数:void AreaCircles(Mat& AreaInput)

#include"common.h"
Mat graySrcArea, thresholdGraySrc;//灰度图像,二值化图像
Mat dilateThresholdGraySrc, erodeThresholdGraySrc;//二值化后膨胀图像,膨胀之后的腐蚀图像
const Mat RectCirclePre(Mat& srcPre)
{ 
	cvtColor(srcPre, graySrcArea, COLOR_BGR2GRAY);
	GaussianBlur(graySrcArea, graySrcArea, Size(3, 3), 2, 2);
	threshold(graySrcArea, thresholdGraySrc, 100, 255, 1);//二值化,阈值要根据自己的图像自己调整
	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	dilate(thresholdGraySrc, dilateThresholdGraySrc, element);//膨胀
	erode(dilateThresholdGraySrc, erodeThresholdGraySrc, element);//腐蚀
	return erodeThresholdGraySrc;
}
void AreaCircles(Mat& AreaInput)
{
	vector<vector<Point>> RectContours;
	vector<Vec4i> Hierarchy;
	findContours(AreaInput, RectContours, Hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
	Mat drawing = Mat::zeros(src.size(), CV_8UC3);
	for (int i = 0;i < RectContours.size();i++)
	{
		double area = contourArea(RectContours[i]);
		cout << area << endl;//输出所有计算出来的面积,方便下一步设置阈值
		if (area > 15000 && area < 100000)//根据上一步计算的阈值设置范围
		{
			drawContours(drawing, RectContours, i, Scalar(0, 255, 0), 2,8, Hierarchy, 0, Point());
			RotatedRect Rect = fitEllipse(RectContours[i]);
			circle(src, Rect.center, 2, Scalar(0, 255, 0), 2, 8, 0);//在原图画出圆心
			ellipse(src, Rect, Scalar(0, 0, 255), 2);//在原图画出轮廓
		}
	}
	namedWindow("面积筛选拟合圆", 0);
	imshow("面积筛选拟合圆", src);
	imwrite("面积筛选拟合圆.jpg", src);//保存检测结果
}

结果如下(自己画的两个圆):

原图:

以下为霍夫圆检测结果:

以下为面积筛选拟合圆结果:

到此这篇关于c++利用Opencv实现多个圆形检测的文章就介绍到这了,更多相关C++ Opencv圆形检测内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++利用Opencv实现多个圆形检测

本文链接: https://www.lsjlt.com/news/172100.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++利用Opencv实现多个圆形检测
    主要是利用霍夫圆检测、面积筛选等完成多个圆形检测,具体代码及结果如下。 第一部分是头文件(common.h): #pragma once #include<opencv2/op...
    99+
    2022-11-13
    C++ Opencv圆形检测 C++ 原型检测
  • Opencv检测多个圆形(霍夫圆检测,轮廓面积筛选)
    主要是利用霍夫圆检测、面积筛选等完成多个圆形检测,具体代码及结果如下。 第一部分是头文件(common.h): #pragma once #include<opencv2/op...
    99+
    2022-11-13
    Opencv 检测圆形 Opencv 圆形检测
  • Python+OpenCV实现单个圆形孔和针检测
    如果中间红色区域是针则可以用下面的代码检测,其阈值和斑点检测的参数根据图像像素值做相应修改 检测的主要思路是先通过找到外面的大圆,再通过圆心定位出一个ROI区域,在ROI区域中检测中...
    99+
    2024-04-02
  • Python+OpenCV实现图片中的圆形检测
    效果展示 中心的三个没检测到 import cv2 import numpy as np import matplotlib.pyplot as plt w = 20 h ...
    99+
    2024-04-02
  • Python实现多个圆和圆中圆的检测
    主要思想是先检测外边圆和圆心 然后再外圆内检测小圆,计算小圆圆心与外圆圆心的距离判断是不是有问题 或者可以计算两圆圆心的距离 # coding:utf-8 import math i...
    99+
    2022-11-16
    Python检测多个圆 Python检测圆中圆 Python检测圆
  • Python opencv进行圆形识别(圆检测)实例代码
    目录前言1 读入图像2 图像预处理3 圆形识别4 显示检测结果5 完整代码和示例图像总结前言 圆形识别(圆检测)是图像识别中很常见的一种处理方式,最核心的是cv2.HoughCirc...
    99+
    2023-05-20
    opencv识别圆形 opencv 圆形检测 opencv形状识别
  • Java实现圆形碰撞检测
    本文实例为大家分享了Java实现圆形碰撞检测的具体代码,供大家参考,具体内容如下 圆形碰撞图如下: 核心思路是:判断两个圆心之间的距离是否小于两个圆的半径之和。 实现代码如下: ...
    99+
    2024-04-02
  • 如何基于OpenCV&Python实现霍夫变换圆形检测
    简述 基于python使用opencv实现在一张图片中检测出圆形,并且根据坐标和半径标记出圆。不涉及理论,只讲应用。 霍夫变换检测圆形的原理 其实检测圆形和检测直线的原理差别不大...
    99+
    2024-04-02
  • opencv实现图形轮廓检测
    要想实现轮廓检测,首先我们需要对待检测的图像进行图像处理: 图像灰度化、高斯滤波、Canny 边缘检测、边缘检测放大处理、提取轮廓。 一、实现简单的全图型检测 即只要将drawCon...
    99+
    2024-04-02
  • 使用c++实现OpenCV绘制圆端矩形
    功能函数 // 绘制圆端矩形(药丸状,pill) void DrawPill(cv::Mat mask, const cv::RotatedRect &rotatedre...
    99+
    2024-04-02
  • C++ opencv霍夫圆检测使用案例详解
    本程序是一个最简单的霍夫圆检测函数的使用案例,刚刚学会的用法,发一下,可以参考,参数啥的可根据图片调节。 #pragma once #include<quickopencv...
    99+
    2024-04-02
  • Python OpenCV实现图形检测示例详解
    目录1. 轮廓识别与描绘1.1 cv2.findComtours()方法1.2 cv2.drawContours() 方法1.3 代码示例2. 轮廓拟合2.1 矩形包围框拟合 - c...
    99+
    2024-04-02
  • C++ OpenCV如何实现车道检测
    这篇文章主要为大家展示了“C++ OpenCV如何实现车道检测”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++ OpenCV如何实现车道检测”这篇文章吧。一、获取车道RO...
    99+
    2023-06-28
  • 基于C#如何实现多边形冲突检测
    这篇文章主要为大家展示了“基于C#如何实现多边形冲突检测”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于C#如何实现多边形冲突检测”这篇文章吧。前言之前在项目上碰到了一个多边形冲突检测的问题,...
    99+
    2023-06-20
  • 基于C#实现的多边形冲突检测实例
    前言 之前在项目上碰到了一个多边形冲突检测的问题,经百度、bing、google,发现目前已有的方案,要么是场景覆盖不全,要么是通过第三方类库实现(而这些第三方类库几乎是无法逆向反编...
    99+
    2024-04-02
  • C++ OpenCV标记点检测怎么实现
    这篇文章主要介绍“C++ OpenCV标记点检测怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++ OpenCV标记点检测怎么实现”文章能帮助大家解决问题。效果如下:导...
    99+
    2023-06-29
  • Python中利用opencv实现缺陷检测的方法
    这篇文章给大家分享的是有关Python中利用opencv实现缺陷检测的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、lo...
    99+
    2023-06-14
  • C++ OpenCV实现二维码检测功能
    目录前言一、二维码检测二、二维码识别三、二维码绘制四、源码总结前言 本文将使用OpenCV C++ 进行二维码检测。 一、二维码检测 首先我们要先将图像进行预处理,通过灰度、滤波、...
    99+
    2024-04-02
  • C++OpenCV实战之网孔检测的实现
    目录前言一、HSV通道转换二、图像修复2.1 OpenCV函数实现2.2 MyFunction三、轮廓提取四、效果显示五、源码总结前言 前段时间,有位粉丝私信我,给我发了一张图片,如...
    99+
    2024-04-02
  • 利用OpenCV实现YOLO对象检测方法详解
    目录前言什么是YOLO物体检测器?项目结构检测图像检测视频前言 本文将教你如何使用YOLOV3对象检测器、OpenCV和Python实现对图像和视频流的检测。用到的文件有yolov3...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作