如何检测一个棋盘角落?

时间:2017-06-14 11:48:59

标签: matlab opencv corner-detection

给定棋盘图像,OpenCV(Matlab等)功能可以非常精确地检测棋盘角落。

现在我只有一个棋盘式的角落(请看两张附图),我该如何准确地检测角点?有没有可用的功能?

如果没有,有人能告诉我在OpenCV中找到棋盘角落的实施细节吗?也许我可以使用类似的想法自己实现单棋盘角检测。

感谢。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用Harris Corner detector查找图片中的角落。如果您在MATLAB中有图像处理工具箱,则可以使用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

以下是我运行新图片时得到的结果:

enter image description here

仍然不完美,但您可以使用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)