import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
import my_util as util
import mian
def main():
import cv2
import numpy as np
filename = "images/many.jpg"
image = cv2.imread(filename)
radious = int(mian.find_radious(image))
#image = cv2.imread("images/24.jpg")
contours_img = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv.equalizeHist(gray)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
#cv_show('blurred', blurred)
edged = cv2.Canny(blurred, 75, 200)
util.image_read('edged', edged)
#gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#blur = cv2.medianBlur(gray, 5)
# circles = cv2.HoughCircles(gray, cv2_HOUGH_GRADIENT, 1, 10)
#circles = cv2.HoughCircles(edged, cv2.HOUGH_GRADIENT, 1, 30,param1=50, param2=30, minRadius=25, maxRadius=40)
circles = cv2.HoughCircles(edged, cv2.HOUGH_GRADIENT, 1, 5+radious, param1=50, param2=20, minRadius=int(radious*0.5), maxRadius=int(radious*1.5))
#cv2.HoughCircles(blur,cv2.HOUGH_GRADIENT , dp, minDist, circles, param1, param2, minRadius, maxRadius)
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
# draw the outer circle
cv2.circle(image, (i[0], i[1]), i[2], (255, 0, 0), 2)
# draw the center of the circle
cv2.circle(image, (i[0], i[1]), 2, (0, 255, 0), 5)
cv2.imshow('detected circles', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
print("钢管数目为:",len(circles[0,:]))
if __name__ == '__main__':
main()
try_1.py
钢管1:

漏检一个,错检一个.正确率几乎100%
钢管2:

错检一个,漏检:8个

如果不算错检,正确率达到95.6%
本文介绍了一种基于图像处理的钢管检测算法,通过使用Canny边缘检测和Hough圆变换,实现了对钢管的有效识别。在实验中,该算法对钢管1的检测正确率接近100%,对钢管2的检测正确率在排除错检后达到95.6%。
498

被折叠的 条评论
为什么被折叠?



