我目前正在使用python学习OpenCV,我正试图在此图像上绘制网格轮廓以从中提取数独谜题
这是我为这个特定问题编写的代码:
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)
为什么会发生这种情况,我可以在代码中更改整个网格?