【问题标题】:How to get cropped image after fisheye calibration in OpenCV如何在 OpenCV 中鱼眼校准后获得裁剪图像
【发布时间】:2017-09-18 22:49:29
【问题描述】:

我正在尝试在 OpenCV 3.2 中校准鱼眼相机。这是一个代码:

 Mat newCamMat;
            cameraMatrix= getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, 0, imageSize, 0); //Does not change anything

            fisheye::estimateNewCameraMatrixForUndistortRectify(cameraMatrix, distCoeffs, imageSize,
                                                                Matx33d::eye(), newCamMat, 1);
            fisheye::initUndistortRectifyMap(cameraMatrix, distCoeffs, Matx33d::eye(), newCamMat, imageSize,
                                             CV_16SC2, map1, map2);

我在校准中使用了这些标志:

 fisheye::CALIB_FIX_SKEW | fisheye::CALIB_RECOMPUTE_EXTRINSIC | fisheye::CALIB_CHECK_COND

我想在可用区域周围没有黑色区域的情况下裁剪图像。对于非鱼眼校准,我通过设置 alpha 来完成。对于鱼眼,我不知道如何更改。有什么建议吗?

Desired result (inside the red rectangle)

Calibration result

【问题讨论】:

    标签: opencv calibration


    【解决方案1】:

    您可以使用蒙版setTo 将Alpha 通道值设置为透明。

    Mat img = imread("fisheye.png",-1), gray, mask;
    
    cvtColor(img, gray, cv::COLOR_BGR2GRAY);
    
    threshold(gray, mask, 0, 255, cv::THRESH_BINARY_INV);
    
    cvtColor(img, img, cv::COLOR_BGR2BGRA);
    
    img.setTo(Scalar(0,0,0,0),mask);
    

    【讨论】:

    • 我不想删除黑色区域。我想在校准后获得仅显示可用像素的 ractangle 区域。我知道我在拐角处丢失了一些信息,但这没关系。
    • @RobertLT 上传您想要的结果的图像。手动执行以显示您想要的内容。
    猜你喜欢
    • 2018-04-15
    • 1970-01-01
    • 2016-05-20
    • 2016-03-22
    • 2018-11-24
    • 2012-10-12
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多