我有一张从相机上拍摄的棋盘图像:
下面是我的最小工作示例代码:
import cv2
print(cv2.__version__)
left_gray = cv2.imread('left_raw.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE)
print(left_gray.shape)
ret, left_corners = cv2.findChessboardCorners(left_gray, (6,5))
print(left_corners)
以下是输出,表明没有找到拐角:
^{pr2}$
我读了另外几个StackOverflow问题:
- This question是关于opencv2在一个“看似简单的场景”中失败的故事,但我相信我所看到的图片要简单得多,因为这张图片是完全裁剪出来的棋盘版本。在我的情况下,我有一个棋盘,我把它放在一些白色的打印纸上。在
- This question是关于高分辨率图像的故障。我不确定我使用的相机是否是高分辨率的,但我的图像与这个问题不同,因为这里的棋盘是(大致)居中的,并不是完全倾斜的。在
- This question是关于一个“完美”棋盘的失败。但是,这一个是对称的,而我的图像是不对称的(它有6行7列),我将输入(5,6)作为我的棋盘。我也试了(6,5),以防我把它弄倒,但没有运气。在
- This question是关于有人把尺寸弄错了。用户声称,如果我们有一个(10,7)板,函数的输入应该是(9,7),其中10=列数,7=原始板中的行数。然而,我认为我们必须从两个维度中减去一个。在任何情况下,我尝试使用(7,5)和一些其他变体来处理我的图像,但没有一个是有效的。在
- This question是关于MATLAB的,但是代码应该与Python有太大的不同,而且用户在检测图像方面看到了一些成功,即使是在比我所拥有的复杂得多的场景中。在
在这一点上,我对如何找到拐角有点迷茫。有人有什么建议可以分享吗?图像和代码就在这里,以防您想测试它们。我还应该指出的是,在拍摄图像时,我曾尝试增加原相机的亮度,但没有成功。在
Tags:
这是我在以下环境中可以获得的最佳结果:
5x5
C++代码:
由于您的OpenCV版本不同,您可能不会得到相同的结果。无论如何,您应该使用OpenCVpattern(你的方法对我来说似乎稍有不同),并记住校准模式必须尽可能平坦才能获得良好的校准结果。在
我使用
cv2.goodFeaturesToTrack()
得到了令人满意的结果。在代码:
我知道这是不准确的,但经过一些预处理,你应该能得到更好的结果。在
:天
相关问题 更多 >
编程相关推荐