如何使用OpenCV Python在棋盤中查詢圖案?
我們可以使用cv2.findChessboardCorners()在影像中找到棋盤角點,並使用cv2.drawChessboardCorners()繪製帶有圖案的棋盤角點。請檢視下面這兩種方法的語法:
ret, corners = cv2.findChessboardCorners(img, patterSize, None) cv2.drawChessboardCorners(img, patternSize, corners,ret)
步驟
要查詢棋盤中的圖案,您可以使用以下步驟:
匯入所需的庫。在以下所有示例中,所需的Python庫是OpenCV。請確保您已經安裝了它。
使用cv2.imread()讀取棋盤的輸入影像,並使用cv2.cvtColor()將其轉換為灰度影像。
使用cv2.findChessboardCorners()查詢棋盤影像中的棋盤角點。它返回兩個輸出引數ret和corners。如果在影像中檢測到棋盤角點,則ret為True。corners是以(x,y)格式表示的檢測到的棋盤角點的座標。
使用cv2.drawChessboardCorners()在原始輸入影像上繪製棋盤角點和圖案。
顯示繪製了棋盤圖案的影像。
讓我們來看一些示例,以便更清楚地理解。
輸入影像
我們將在下面的示例中使用此影像作為輸入檔案。
示例
在這個Python程式中,我們查詢輸入影像中的圖案。
# import required libraries import cv2 # read input image img = cv2.imread('left01.jpg') # convert the input image to a grayscale gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # Find the chess board corners ret, corners = cv2.findChessboardCorners(gray, (7,6),None) # if chessboard corners are detected if ret == True: # Draw and display the corners img = cv2.drawChessboardCorners(img, (7,6), corners,ret) cv2.imshow('Chessboard',img) cv2.waitKey(0) cv2.destroyAllWindows()
執行上述程式碼後,將生成以下輸出視窗:
示例
在這個Python程式中,我們將看到如何以不同的方式解決相同的問題:
# import required libraries import cv2 # read input image img = cv2.imread('left01.jpg') # convert the input image to a grayscale gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # Find the chess board corners ret, corners = cv2.findChessboardCorners(gray, (7,6),None) # terminating criteria criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) if ret == True: corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) # Draw and display the corners img = cv2.drawChessboardCorners(img, (7,6), corners,ret) cv2.imshow('Chessboard',img) cv2.waitKey(0) cv2.destroyAllWindows()
執行後,將生成以下輸出:
廣告