给定棋盘图像,OpenCV(Matlab等)功能可以非常精确地检测棋盘角落。
现在我只有一个棋盘式的角落(请看两张附图),我该如何准确地检测角点?有没有可用的功能?
如果没有,有人能告诉我在OpenCV中找到棋盘角落的实施细节吗?也许我可以使用类似的想法自己实现单棋盘角检测。
感谢。
答案 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
以下是我运行新图片时得到的结果:
仍然不完美,但您可以使用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)