如何检测一个棋盘角?

How to detect one chessboard corner?

给定一张棋盘图像,OpenCV(Matlab等)函数可以非常精确地检测棋盘角点。

现在我只有一个棋盘状的角(请看两张附图),如何精确检测角点?有可用的功能吗?

如果没有,谁能告诉我在OpenCV中寻找棋盘角的实现细节?也许我可以用类似的思路自己实现一角检测

谢谢。

您可以使用 Harris Corner detector to find the corner in the image. If you have the Image Processing Toolbox in MATLAB you can use the corner() function to detect the corner: https://uk.mathworks.com/help/images/ref/corner.html

检测角点的MATLAB代码:

image = imread('E8UD1.png');
imageGray  = rgb2gray(image);
C = corner(imageGray);
imshow(imageGray);
hold on;
plot(C(:,1), C(:,2), 'r*');

评论后更新

corner() 函数在检测角点方面做得不错,但你是对的,你确实会得到异常值,我会推荐一种更复杂的算法,它被称为 Shi-Tomasi Corner Detector & Good Features to Track

这是我 运行 新图像时得到的结果:

仍然不完美,但您可以尝试使用 goodFeaturesToTrack() 函数的参数

代码如下:

import numpy as np
import cv2

filename = 'ddNNZ.jpg'
img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

corners = cv2.goodFeaturesToTrack(gray,1,0.01,10)
corners = np.int0(corners)

for i in corners:
    x,y = i.ravel()
    cv2.circle(img,(x,y),3,255,-1)

cv2.imwrite('result.png',img)