I am trying to find all the polygons (including the filled in one) in the image below. Currently, I'm trying to use Hough Transform to accomplish this, but it does not detect all the lines in the image. In addition, because of how wide the lines are, it counts each line twice. Is there a way to apply some filters to the image to make the Hough Transform perform better or is there an entirely different way to find the polygons that I'm missing? Thanks!
Here is the picture I am processing,
and my code is below.
import cv2
import numpy as np
img = cv2.imread('test.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
minLineLength = 100
maxLineGap = 10
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
for num in range (0, len(lines)):
for x1,y1,x2,y2 in lines[num]:
cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)
cv2.imwrite('houghlines.jpg',img)
I think using findContours is easier for this problem.
Following are the solution, I write down the comments, if you have any questions, please ask.
If you run the program(I am using opencv3 clone from github).You will find out there are 5 contours
Their attributes are
You can try to figure out the types of the polygon by these attributes.
The codes of detect_by_contour and morphology_skeleton located at forum_quest. The codes of ocv::contour_analyzer analyzer and ocv::contour_analyzer located at ocv_libs.