gpt4 book ai didi

c++ - 如何在 Leap Motion 上检测棋盘以进行相机校准?

转载 作者:行者123 更新时间:2023-11-28 01:19:40 26 4
gpt4 key购买 nike

我正在尝试通过 OpenCV 的校准库和棋盘图案校准 Leap Moion 设备,但它没有找到棋盘角。

我使用的是印在 DIN A3 纸上的 9x6 棋盘图案,该纸又安装在一张大的白色 table 上。当我拍摄场景快照并将图像直接传递到 OpenCV 的 findChessboardCorners 函数时,没有找到任何东西。我首先想到,这可能是因为 Leap Motion 的原始图像中存在较大的黑色渐晕效果。我在文档中读到深色背景不利于该功能,它可能无法正常工作。所以我想出了一种以编程方式“纠正”这种效果的方法,使边缘变得更亮(注意:实际场景中的更多光线根本无济于事)。但是它仍然没有检测到角。

原始图像

enter image description here

暗角校正后

enter image description here

代码如下

// img is the leap motion's raw image
leapMat.create(240, 640, CV_8UC1);
leapMat.data = const_cast<uchar*>(img.data());

// Vignetting correction
Mat leapMat_vig;
leapMat.copyTo(leapMat_vig);
for (int i = 0; i < leapMat_vig.rows; i++)
{
for (int j = 0; j < leapMat_vig.cols; j++)
{
double u = (double)(i - leapMat_vig.rows / 2) / leapMat_vig.rows;
double v = (double)(j - leapMat_vig.cols / 2) / leapMat_vig.cols;
double w = pow(u, 2) + pow(v, 2);
leapMat_vig.at<uchar>(i, j) += w * 2 * 255;
}
}

vector<Point2f> foundPoints;

// findChessboardCorners is not detecting my chessboard pattern
const auto found = findChessboardCorners(leapMat_vig, Size(6, 9), foundPoints, CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE + CALIB_CB_FAST_CHECK);

我也试过把图片放大一点,但还是不行。

有没有人知道我做错了什么或者我可以改进什么?

最佳答案

如果颜色造成问题,您可以尝试通过将黑色背景遮盖成白色来去除黑色背景,只留下棋盘区域(您可能想研究这个问题:klick!)。然后,一些直方图拉伸(stretch)/均衡(me!)会增加对比度并有望解决您的问题。

我最近在 Python 中做了类似的事情 - 在增加对比度并丢失不良信息之后 - 它就像一个魅力。文档条目末尾的注释 - 我想你指的是什么? ( please! ) - 支持这种方法。

关于c++ - 如何在 Leap Motion 上检测棋盘以进行相机校准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57094458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com