ich derzeit OpenCV in Python lerne, und ich versuche, auf diesem Bild die Kontur des Gitters zu ziehen über das Sudoku-Rätsel zu extrahieren daraus Extrahierung Gitter aus einem Sudoku-Rätsel in Python
Das ist das ist Code schrieb ich für dieses spezifische Problem:
CONST_IMAGE_PATH = "sudoku-original.jpg"
CONST_COEFF = 0.02
def main():
originalImage = cv2.imread(CONST_IMAGE_PATH)
img = cv2.imread(CONST_IMAGE_PATH,0)
img = cv2.medianBlur(img,5)
img = cv2.adaptiveThreshold(img , 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2)
img = cv2.bitwise_not(img,img)
print "thresholding the image"
cv2.imshow("Thresholded", img)
kernel = np.empty((3,3),'uint8')
kernel[0][0] = 0
kernel[0][1] = 1
kernel[0][2] = 0
kernel[1][0] = 1
kernel[1][1] = 1
kernel[1][2] = 1
kernel[2][0] = 0
kernel[2][1] = 1
kernel[2][2] = 0
dilated = cv2.dilate(img,kernel)
cv2.imshow("Dilated", dilated)
print "detecting the grid"
(contours, _) = cv2.findContours(img.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = sorted(contours, key = cv2.contourArea , reverse = True)
screenCnt = None
for contour in contours:
perimeter = cv2.arcLength(contour,True)
approx = cv2.approxPolyDP(contour, CONST_COEFF*perimeter , True)
if len(approx) == 4:
if perimeter > maxPerimeter:
maxPerimeter = perimeter
screenCnt = approx
cv2.drawContours(originalImage , [screenCnt], -1, (0,255,0), 3)
cv2.imshow("SudokuPuzzle", originalImage)
cv2.waitKey(0)
aber was über das gesamte Gitter statt Zeichnung ist passiert, es zieht nur über die untere rechte Feld.
Warum passiert das und was kann ich in meinem Code ändern, um über das gesamte Raster zu zeichnen?