OpenCV:车轴检测

时间:2017-05-11 09:36:20

标签: python opencv hough-transform opencv3.1

我试图检测图像中的车轴。以下是我遵循的步骤。

  • 读取图像并更改为灰度。
  • 应用中位数。
  • 应用canny边缘检测。
  • 应用霍夫圈。

对于canny,使用轨迹条改变threshold1,threshold2参数,并且对于Hough圆param1,param2,minDist是变化的。通过param1和param2对检测没有影响。

原始 Original Image

平均: Median的Canny: Canny

检测到cirlce: enter image description here

问题:正如您在上一张图片中看到的那样,它会检测到圆圈并且距离原始轴稍远。我需要更改或考虑其他参数吗?

代码

import cv2
import numpy as np

def readAndResize(image,a):
    imag = cv2.imread(image,a)
    org = cv2.imread(image)
    #resixe the image
    small = cv2.resize(imag, (0,0), fx=0.3, fy=0.3)
    small2 = cv2.resize(org, (0,0), fx=0.3, fy=0.3)
    height, width = small.shape
    img = small[height - height/3:height,0:width]
    org2 = small2[height - height/3:height,0:width]
    return img, org2


img,org2 = readAndResize('5.jpg',0)
cv2.imshow('Original',org2)
gray = cv2.cvtColor(org2, cv2.COLOR_BGR2GRAY)
med = cv2.medianBlur(gray,5)
canny = cv2.Canny(med,100,50)
circles = cv2.HoughCircles(canny,cv2.HOUGH_GRADIENT,1,92,20,10,minRadius=4,maxRadius=0)
circles = np.uint16(np.around(circles))

for i in circles[0,:]:
    cv2.circle(org2,(i[0],i[1]),i[2],(0,255,0),2)
    cv2.circle(org2,(i[0],i[1]),2,(0,50,255),3)
    cv2.imshow('Median',med)
    cv2.imshow('canny',canny)
    cv2.imshow('Detected',org2)
cv2.waitKey(0)
cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:1)

很抱歉,但我没有使用您的代码。以下是其他一些可以帮助您:

import cv2
import cv2.cv as cv
import numpy as np
import sys

img = cv2.imread('5.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img,cv.CV_HOUGH_GRADIENT,1,240,
                               param1=250,
                               param2=50,
                               minRadius=5,
                               maxRadius=200)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2) 
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),1)
print circles
cv2.imshow('circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

使用参数240 param1 param2 minRadius maxRadius进行游戏 另外我用这段代码得到了什么 Sample