pokerfac_ 2022-09-23 11:37 采纳率: 100%
浏览 60
已结题

为什么使用 findChessboardCorners 函数在 python 和 C++ 环境中得到不同的结果?

python和c++有相同的opencv version4.6.0。当使用相同的参数检测到相同的图像,但在 python 中检测到所有角点而在 C++ 中没有或部分检测到角点时,如何在 C++ 中获得相同的结果?附上原图,程序如下。
您的回答将非常感激!

img

img = cv2.imread("left.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
subpix_criteria = (cv2.TERM_CRITERIA_EPS +
                       cv2.TERM_CRITERIA_MAX_ITER, 30, 0.1)
checkerboard = (3,14)
ret, corners = cv2.findChessboardCorners(
            gray, checkerboard, cv2.CALIB_CB_ADAPTIVE_THRESH + cv2.CALIB_CB_FAST_CHECK + cv2.CALIB_CB_NORMALIZE_IMAGE)
if ret == True:
    corners2 = cv2.cornerSubPix(gray, corners, (3, 3),
                                        (-1, -1), subpix_criteria)
    cv2.drawChessboardCorners(img, checkerboard, corners, ret)

```c++
cv::Mat oriImg = cv::imread("left.jpg");
    cv::Size patternRowsByCols = cv::Size(14, 3);
std::vector<cv::Point2f> corners;  
    cv::Mat gray;
    if (oriImg.channels() == 3) {
        cv::cvtColor(oriImg, gray, cv::COLOR_BGR2GRAY);
    } else {
        gray = oriImg;
    }

    bool isFound = cv::findChessboardCorners(gray, patternRowsByCols, corners, cv::CALIB_CB_ADAPTIVE_THRESH + cv::CALIB_CB_FAST_CHECK + cv::CALIB_CB_NORMALIZE_IMAGE);
    if (isFound) {
        cv::cornerSubPix(gray, corners, cv::Size(3, 3), cv::Size(-1, -1), cv::TermCriteria(cv::TermCriteria::MAX_ITER + cv::TermCriteria::EPS, 30, 0.1));
    }

    cv::drawChessboardCorners(oriImg, patternRowsByCols, corners, isFound);

```

  • 写回答

1条回答 默认 最新

  • Sonhhxg_柒 2022年度博客新星TOP 2 2022-09-23 11:40
    关注

    关于什么:

    checkerboard = (3,14)
    与:

    cv::Size patternRowsByCols = cv::Size(14, 3)
    (c ++版本有错误的方式,imo)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月1日
  • 已采纳回答 9月23日
  • 创建了问题 9月23日

悬赏问题

  • ¥50 gki vendor hook
  • ¥15 centos7中sudo命令无法使用
  • ¥15 灰狼算法和蚁群算法如何结合
  • ¥15 这是一个利用ESP32自带按键和LED控制的录像代码,编译过程出现问题,请解决并且指出错误,指导如何处理 ,协助完成代码并上传代码
  • ¥20 stm32f103,hal库 hal_usart_receive函数接收不到数据。
  • ¥20 求结果和代码,sas利用OPTEX程序和D-efficiency生成正交集
  • ¥50 adb连接不到手机是怎么回事?
  • ¥20 抓取数据时发生错误: get_mooncake_data() missing 1 required positional argument: 'driver'的问题,怎么改出正确的爬虫代码?
  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联