Python-OpenCV 图像处理(十九):霍夫圆检测 (发票印章去除)

import cv2
import numpy as np
from matplotlib import pyplot as plt

__author__ = "zxsuperstar"
__email__ = "zxsuperstar@163.com"

"""
霍夫圆检测
"""
def detect_circle_demo(image):
    # dst = cv2.cv2.GaussianBlur(image,(3,3),0)  #高斯滤波
    # cv2.imshow("dst",dst)

    #Mean Shift的优点就在于如果是像背景桌面的浅色纹理,
    # 图像分割的过程中相当于将这些小的浮动过滤掉,并且保留相对明显的纸张边缘
    # dst = cv2.bilateralFilter(src=image, d=0, sigmaColor=100, sigmaSpace=15)  #高斯双边滤波
    dst = cv2.pyrMeanShiftFiltering(image,10,100) #  均值偏移滤波
    cimage = cv2.cvtColor(dst,cv2.COLOR_BGRA2GRAY)
    # ret, cimage = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
    # cimage = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY, 3, 5)
    # cimage = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 3, 5)
    cv2.imshow("cimage",cimage)
    circle = cv2.HoughCircles(cimage, cv2.HOUGH_GRADIENT,1,200,param1=50,param2=30,minRadius=0,maxRadius=0)
    if not circle is None:
        circle = np.uint16(np.around(circle))
        print(circle)
        for i in circle[0,:]:
            cv2.circle(image,(i[0],i[1]),i[2],(0,0,255),2)
            # cv2.circle(image, (i[0], i[1]), 2, (255, 0, 0), 2)
            # cv2.namedWindow('circle', cv2.WINDOW_NORMAL)
            cv2.imshow("circle", image)


if __name__ == "__main__":
    src = cv2.imread("./image/fp1.jpg") #blue green red
    # cv2.namedWindow("image", cv2.WINDOW_AUTOSIZE)
    # cv2.namedWindow('image', cv2.WINDOW_NORMAL)
    w ,h = src.shape[0:2]

    image = cv2.resize(src, (0, 0), fx=0.25, fy=0.25, interpolation=cv2.INTER_NEAREST)
    cv2.imshow("image",image)

    detect_circle_demo(image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


运行结果:

 

说明:

1.OpenCV的霍夫圆变换函数原型为:HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) -> circles

image参数表示8位单通道灰度输入图像矩阵。

method参数表示圆检测方法,目前唯一实现的方法是HOUGH_GRADIENT。

dp参数表示累加器与原始图像相比的分辨率的反比参数。例如,如果dp = 1,则累加器具有与输入图像相同的分辨率。如果dp=2,累加器分辨率是元素图像的一半,宽度和高度也缩减为原来的一半。

minDist参数表示检测到的两个圆心之间的最小距离。如果参数太小,除了真实的一个圆圈之外,可能错误地检测到多个相邻的圆圈。如果太大,可能会遗漏一些圆圈。

circles参数表示检测到的圆的输出向量,向量内第一个元素是圆的横坐标,第二个是纵坐标,第三个是半径大小。

param1参数表示Canny边缘检测的高阈值,低阈值会被自动置为高阈值的一半。

param2参数表示圆心检测的累加阈值,参数值越小,可以检测越多的假圆圈,但返回的是与较大累加器值对应的圆圈。

minRadius参数表示检测到的圆的最小半径。

maxRadius参数表示检测到的圆的最大半径。

2.OpenCV画圆的circle函数原型:circle(img, center, radius, color[, thickness[, lineType[, shift]]]) -> img

img参数表示源图像。

center参数表示圆心坐标。

radius参数表示圆的半径。

color参数表示设定圆的颜色。

thickness参数:如果是正数,表示圆轮廓的粗细程度。如果是负数,表示要绘制实心圆。

lineType参数表示圆线条的类型。

shift参数表示圆心坐标和半径值中的小数位数。

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Python-opencv是一个使用Python进行图像处理和计算机视觉的库。运动方向判断是指通过分析视频中物体或者人的运动轨迹来判断其运动的方向。运动方向判断可以在很多应用中使用,比如行人检测、车辆跟踪等。 在这个.rar文件中,你可以找到一些使用Python-opencv处理视频中运动方向判断的示例代码和一些视频样本。通过运行这些示例代码,你可以学习如何使用Python-opencv来实现运动方向判断的功能。 Python-opencv中处理视频的基本步骤包括读取视频、获取每一帧图像、预处理图像、计算运动方向等。首先,使用cv2.VideoCapture函数读取视频文件。然后,使用while循环遍历每一帧图像,并对每一帧进行预处理,比如转换成灰度图像、平滑处理等。接下来,使用cv2.absdiff函数计算当前帧和上一帧之间的差别,通过阈值化处理得到前景图像。然后,可以使用cv2.findContours函数找出前景图像中的轮廓,进一步筛选出运动物体的轮廓。最后,计算轮廓的中心点坐标并与上一帧的中心点坐标进行比较,从而判断运动方向。 通过这些步骤,我们可以实现对视频中运动方向的判断。当然,这只是一个简单的示例,实际应用中可能需要更复杂的算法和处理步骤。但是通过学习这个.rar文件中的代码和示例,你可以了解到使用Python-opencv处理视频中运动方向判断的基本方法,同时也可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值