[opencv] 极线校正

本文详细介绍了立体视觉中图像校正与映射的过程,包括计算旋转矩阵、投影矩阵及映射,通过OpenCV函数实现左右图像的校正,并展示了校正后的效果。提供了完整的代码实现与下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//R = Rr*inv(Rl); T = Tr - R*Tl;
    invert(RLeft,RLeft);
    Mat R = RRight.clone();
    gemm(R,RLeft,1,1,0,R);
    Mat T;
    gemm(R,TLeft,1,1,0,T);
    T = TRight - T;

    //计算旋转矩阵和投影矩阵
    Mat R1, R2, P1, P2, Q;
    stereoRectify(KLeft,Mat::zeros(1,5,CV_32F),KRight,Mat::zeros(1,5,CV_32F),
        imageSize,R,T,R1,R2,P1,P2,Q,CALIB_ZERO_DISPARITY,0);
    //计算映射
    Mat rmap[2][2];
    initUndistortRectifyMap(KLeft,Mat::zeros(1,5,CV_32F), R1, P1, imageSize, CV_16SC2, rmap[0][0], rmap[0][1]);
    initUndistortRectifyMap(KRight, Mat::zeros(1,5,CV_32F), R2, P2, imageSize, CV_16SC2, rmap[1][0], rmap[1][1]);
    remap(imgL, imgLr, rmap[0][0], rmap[0][1], CV_INTER_AREA);//左校正
    remap(imgR, imgRr, rmap[1][0], rmap[1][1], CV_INTER_AREA);//右校正

    Mat showImage(imageSize.height,2*imageSize.width,CV_8UC3);
    Rect rectLeft(0,0,imageSize.width,imageSize.height);
    Rect rectRight(imageSize.width,0,imageSize.width,imageSize.height);
    imgLr.copyTo(showImage(rectLeft));
    imgRr.copyTo(showImage(rectRight));
    
    for( int i = 0; i < imageSize.height; i += 32 )
    {
        line(showImage, Point(0, i), Point(2*imageSize.width, i), Scalar(0, 255, 0), 1, 8);
    }

 效果图:

 

 代码下载:https://github.com/zhanxiage1994/rectifyImages.git

转载于:https://www.cnblogs.com/zhanxiage1994/p/6027645.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值