opencv 检测图片中圆形物体(解决乱线问题)

2018-03-0418:03:12

整体代码如下:

def detect_circle_demo (image):
    #  降噪处理
    dst = cv.pyrMeanShiftFiltering(image,10,80)
    cv.imshow("jiangzao",dst)
    cimage = cv.cvtColor(dst,cv.COLOR_BGR2GRAY)  #  灰度图转换
    print("正在灰度转换。。。。。。")
    cv.imshow("test",cimage)
    #  霍夫圆处理
    circles = cv.HoughCircles(cimage,cv.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)
    print("原值",circles)
    #  转换为整数
    circles = np.uint16(np.around(circles))
    print("转换为整数",circles)
    for i in circles[0,:]:
        cv.circle(image,(i[0],i[1]),i[2],(0,0,255),2)
        cv.circle(image,(i[0],i[1]),2,(255,0,0),2)
    cv.imshow("circle",image)

src = cv.imread("E:/opencv_pictures/smarties.png")
cv.namedWindow("output",cv.WINDOW_AUTOSIZE)
cv.imshow("output",src)
detect_circle_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

Meanshift的代码:

cv.pyrMeanShiftFiltering(image,10,80)

因为主要目的是预处理降噪,windows size和color distance都不用太大,避免浪费计算时间还有过度降噪。降噪后可以看到桌面上的纹理都被抹去了,纸张边缘附近干净了很多。然而这还远远不够,图案本身,和图像里的其他物体都有很多明显的边缘,而且都是直线边缘。

降噪处理,一般是为了避免,处理边缘时的模糊问题,这样能更精确的发现边缘。

其中,没有检测到圆的问题如下图:

右上角出现未检测到的圆,应该是降噪过度导致的,所以修改参数即可。

如图,即可识别所有的原型,如果出现乱线,就是满屏的红线,那就是未降噪,或者是降噪不足导致的。

原文地址:https://www.cnblogs.com/pengwenzheng/p/8505453.html

时间: 2024-10-29 17:30:24

opencv 检测图片中圆形物体(解决乱线问题)的相关文章

用 Python 和 OpenCV 检测图片上的条形码

  用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问题,浏览代码之后,我提供了一些对原始算法的更新和改进. 首先需要留意的是,这个算法并不是对所有条形码有效,但会给你基本的关于应用什么类型的技术的直觉. 假设我们要检测下图中的条形码: 图1:包含条形码的示例图片 现在让我们开始写点代码,新建一个文件,命名为detect_barcode.py,打开并编

Opencv 截取图片中一部分的方法(包括任意区域)

对于图像的截取的方式很多都是对 IplImage* img 这种格式的进行操作的. 1.对cvMat操作其实非常的简单: Mat image= imreadimag): Rect rect(10, 20, 100, 50); Mat image_roi = image(rect); 另外:srcImage(rect).copyTo(roiImage)也可以达到同样的效果! 2.IplImage* img 从图里面截取矩形的操作一般是这个样子的: CvSize size= cvSize(40,50

OpenCV检测篇(二)——笑脸检测

前言 由于本文与上一篇OpenCV检测篇(一)--猫脸检测具有知识上的连贯性,所以建议没读过前一篇的先去阅读一下前一篇,前面讲过的内容这里会省略掉. 笑脸检测 其实也没什么可省略的,因为跟在opencv中,无论是人脸检测.人眼检测.猫脸检测.行人检测等等,套路都是一样的.正所谓: 自古深情留不住,总是套路得人心. 发挥主要作用的函数有且仅有一个:detectMultiScale().前一篇猫脸检测中已经提到过这个函数,这里就不再详细赘述. 这里只说一下笑脸检测的流程,显然也都是套路: 1.加载人

OpenCV——基于颜色的物体检测系统

这次区别于证件照,我试着编写了一下在复杂背景下分离纯色物体的系统,因为只是简单的编程,所以结果有待优化,先分析一下实验环境: 这次的背景杂乱,虽然主体是粉色主导,但是因为光照不统一,色域跨度较大,倒影中也有粉色痕迹,杯壁上有花纹,这种情况下边缘检测误差很大. 为了让计算机更好的识别主体颜色,要先将RGB色域转换为HSV色域,在HSV色域中,红色的H值在(0,3)U(156,180)中.粉色的S值饱和度不高,但是比白色要高很多,区间在(50,150)以内. V代表Value,只有黑色或偏黑的颜色V

OpenCV轮廓检测,计算物体旋转角度

效果还是有点问题的,希望大家共同探讨一下 // FindRotation-angle.cpp : 定义控制台应用程序的入口点. // // findContours.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <vector> #include <opencv2/opencv.hpp> #include <opencv2/core/core.h

利用OpenCV检测图像中的长方形画布或纸张并提取图像内容

基于知乎上的一个答案.问题如下: 也就是在一张照片里,已知有个长方形的物体,但是经过了透视投影,已经不再是规则的长方形,那么如何提取这个图形里的内容呢?这是个很常见的场景,比如在博物馆里看到一幅很喜欢的画,用手机找了下来,可是回家一看歪歪斜斜,脑补原画内容又觉得不对,那么就需要算法辅助来从原图里提取原来的内容了.不妨把应用的场景分为以下: 纸张四角的坐标(图中红点)已知的情况 也就是上面的左图中4个红点是可以准确获取,比如手动标注,那么就简单了:用OpenCV的Perspective Trans

惊!Python能够检测动态的物体颜色!

本篇文章将通过图片对比的方法检查视频中的动态物体,并将其中会动的物体定位用cv2矩形框圈出来.本次项目可用于树莓派或者单片机追踪做一些思路参考.寻找动态物体也可以用来监控是否有人进入房间等等场所的监控.不仅如此,通过对物体的像素值判断分类,达到判断动态物体总体颜色的效果. ? 引言 物体检测,是一种基于目的几何学和统计资料特点的影像拆分,它将目的的拆分和辨识,其准确度和实时性是整个该系统的一项最重要战斗能力.特别是在是在简单桥段中的,必须对多个目的展开实时处理时,目的系统会萃取和辨识就变得尤其最

OpenCV检测人脸实例代码

下面是使用OpenCV通过在硬盘中读入图像来对其进行Haar人脸检测的代码. //包含头文件 #include <opencv2/core/core.hpp> #include "cv.h" #include "highgui.h" int main() {     const char* cascade_name = "C:\\opencv249\\sources\\data\\haarcascades\\haarcascade_fronta

利用OpenCV检测手掌(palm)和拳头(fist)

思路:利用训练好的palm.xml和fist.xml文件,用OpenCV的CascadeClassifier对每一帧图像检测palm和fist,之后对多帧中检测到的palm和fist进行聚类分组,满足分组条件的区域为最终检测结果. 代码: #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/im