相关疑难解决方法(0)

findChessboardCorners无法获得校准图像

我试图让OpenCV 2.4.5从我的网络摄像头识别棋盘图案.我无法做到这一点,所以我决定尝试使用"完美"的图像让它工作:

棋盘与白色边框

但它仍然不起作用 - patternFound每次都返回false.有谁知道我做错了什么?

#include <stdio.h>

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/calib3d/calib3d.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;
using namespace std;

int main(){
    Size patternsize(8,8); //number of centers
    Mat frame = imread("perfect.png"); //source image
    vector<Point2f> centers; //this will be filled by the detected centers

    bool patternfound = findChessboardCorners(frame,patternsize,centers);

    cout<<patternfound<<endl;
    drawChessboardCorners(frame, patternsize, Mat(centers), patternfound);

    cvNamedWindow("window");
    while(1){
        imshow("window",frame);
        cvWaitKey(33);
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ opencv computer-vision camera-calibration

12
推荐指数
2
解决办法
2万
查看次数

OpenCV findChessboardCorners函数在(显然)简单的场景中失败

我正在尝试使用OpenCV找到棋盘的角落.

我正在使用的图像包含两个棋盘,但我只对其中一个的子区域感兴趣.下图显示了原始图像.

原始图像

然后使用GIMP,我选择了感兴趣的区域,并将所有其他像素设置为默认值.

裁剪图像

我实际上没有裁剪图像,因为我已经使用这个图像尺寸校准了相机,我不想改变它.该操作应该相当于更改图像矩阵中的值,但我更喜欢使用GIMP.这是一次性实验,使用图形工具而不是使用代码执行该操作更快.

生成的图像包含一个24x5角的棋盘,但函数findChessboardCorners无法找到任何内容.

这是我正在使用的Python代码:

>>> img = cv2.imread('C:\\Path\\To\\C4-Cropped.png', 0)
>>> cv2.findChessboardCorners(img, (24, 5))
(False, None)
>>> cv2.findChessboardCorners(img, (5, 24))
(False, None)
Run Code Online (Sandbox Code Playgroud)

我也尝试设置自适应阈值,但它仍然无效

>>> cv2.findChessboardCorners(img, (24, 5), flags=cv2.cv.CV_CALIB_CB_ADAPTIVE_THRESH)
(False, None)
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪.我过去多次使用OpenCV的这个功能,它总是有效,即使图像看起来比这个复杂得多.该区域的照明不均匀,但功能应足够强大以处理.

使用GIMP临时创建的人工图像有什么问题吗?我怎样才能找到角落?

任何建议将不胜感激.

python opencv computer-vision camera-calibration

5
推荐指数
4
解决办法
8425
查看次数