write in front of the article
These days because the work needs to learn image detection, stupid I do not want to stare at OPENCV start to learn (; ′⌒ '), even the ability to check information is weak 〒▽〒
Praise My best man ticket (*^▽^*) The man is not the image processing but love my stupid (the "contest")
Let me give him the request (our store?? Omega??) Our store??? He put the game down and spent a day or two doing it for me and then wrote a detailed manual φ (>ω<*)
Of course, write it down. (?????)?
?? ??? 3?? Learn to go
A. Introduction:
The first time you use Python you must feel the convenience of Python. Just call the class library as a high-level programming language.
OPENCV provides a number of methods for the identification of circular objects .
( attached at the end of this code )
two. Detection steps:
2.1 Reading Images
window 1(initial image not processed)
2.2 Noise reduction processing
Because there is a lot of noise in the image (what is the noise reference https://www.zhihu.com/question/23877970)
Using noise reduction Method Cv2.blur (IMG, (5,5))
Two of these parameters are horizontal longitudinal blur degree, the larger the value the more blurred
This is the degree of ambiguity of 5,5
This is the degree of ambiguity
Here we use the 5,5 effect to test down the best
2.3 Grayscale
grayscale is often used in color-rich images, similar to the fading operation in PS.
Method: Cv2.cvtcolor (Result,cv2. Color_bgr2gray)
Because the original image is black and white main color, so the color change is not big
2.4 Hoffman Change Circle detection
Previous noise reduction and grayscale are all for this step of detection
Reference article http://lib.csdn.net/article/opencv/24037
Here's how:
Cv2. Houghcircles (Gray,cv2. HOUGH_GRADIENT,1,50,PARAM1=80,PARAM2=30,MINRADIUS=15,MAXRADIUS=20)
parameter 1 Image: Passing images
parameter 2 method: Default, no understanding
parameter 3 DP: Default, no understanding
parameter 4 mindist: The minimum distance of different centers, in pixels
parameter 5 relates to the Canny algorithm, here The upper limit of the Canny algorithm, where the Canny the lower limit of the algorithm is automatically set to a maximum of half, immediately introduced canny algorithm
parameter 6 need to understand the above reference article, can be considered as the cumulative quantity to be reached
parameter 7,8 is the minimum radius and maximum radius, avoiding the recognition of white circles
So what is the canny algorithm? In simple terms, the edge detection algorithm
Concrete implementation of the results can be referred to the method: Cv2. Canny (IMG, 27, 54), showing the effect as
The smaller the edge of the parameter, the less we use it, which is set to a maximum of 80
Cv2. Canny (IMG, 40, 80)
Eventually
Circles=cv2. Houghcircles (Gray,cv2. HOUGH_GRADIENT,1,50,PARAM1=80,PARAM2=30,MINRADIUS=15,MAXRADIUS=20)
all recognized round parameters (center position, radius) are saved to circles
Can be thought of as an array
2.5 marks
Using the Cv2.circle () method to circle pictures According to The image information obtained by 2.4
Finished, you can adjust the parameters to achieve satisfactory results.
three. Attached Code
#-*-Coding:utf-8-*-import cv2# loaded and displayed picture Img=cv2.imread (' 1.jpg ') cv2.imshow (' 1 ', img) #降噪 (obfuscation to reduce defect points) result = Cv2.blur (IMG, (5,5)) cv2.imshow (' 2 ', result) #灰度化, is the de-color (similar to vintage photos) Gray=cv2.cvtcolor (result,cv2. Color_bgr2gray) cv2.imshow (' 3 ', gray) #param1的具体实现 for edge detection canny = cv2. Canny (IMG, max, cv2.imshow) (' 4 ', Canny) #霍夫变换圆检测circles = Cv2. Houghcircles (Gray,cv2. HOUGH_GRADIENT,1,50,PARAM1=80,PARAM2=30,MINRADIUS=15,MAXRADIUS=20) #输出返回值 for easy viewing of type print (circles) #输出检测到圆的个数print ( Len (Circles[0])) print ('-------------I'm a split line-----------------') #根据检测到圆的信息, draw each circle for the circle in Circles[0]: # The basic information of the Circle print (circle[2]) #坐标行列 (that is, the center) X=int (circle[0]) y=int (circle[1]) #半径 R=int ( CIRCLE[2]) #在原图用指定颜色圈出圆, the parameter is set to int so there is an error img=cv2.circle (IMG, (x, y), R, (0,0,255), 1,8,0) #显示新图像cv2. imshow (' 5 ', img) #按任意键退出cv2. Waitkey (0) cv2.destroyallwindows ()
Circular detection using OPENCV under Python