Python+OpenCV相机摄像头标定,矫正畸变,实时输出正常视频流

2 篇文章 0 订阅
1 篇文章 0 订阅

搞了个摄像头,拍摄有畸变,拍摄出的直线是弧线形状,类似于鱼眼相机,需要正常输出,遂使用OpenCV进行相机标定

1、畸变参数的提取

大哥用MATLAB提取的畸变内参和畸变系数,用来矫正,我不会,此博客主要说参数的使用......(如有需要可以问我,我帮你问大哥)

2、畸变参数的使用(基于Python)

直接上代码,参数共需要两对,一个内参,一个畸变系数

(1)内参,在MATLAB提取,为3X3的一个矩阵,从中去除0,,对应位置填到代码中(应该是可以转置)。

(2)畸变系数,总共有五个,径向畸变3个(k1,k2,k3)和切向畸变2个(p1,p2)。,对比填到代码中,别填错顺序!!!没有的填0就行

import cv2
import numpy as np
cap = cv2.VideoCapture(0)

def undistort(frame):
    fx = 1311.94228326091
    cx = 937.984968117315
    fy = 1310.63631268594
    cy = 514.783585422419
    k1, k2, p1, p2, k3 = -0.469785052535390, 0.274212670963307, 0.0, 0.0, 0.0

    # 相机坐标系到像素坐标系的转换矩阵
    k = np.array([
        [fx, 0, cx],
        [0, fy, cy],
        [0, 0, 1]
    ])
    # 畸变系数
    d = np.array([
        k1, k2, p1, p2, k3
    ])
    h, w = frame.shape[:2]
    mapx, mapy = cv2.initUndistortRectifyMap(k, d, None, k, (w, h), 5)
    return cv2.remap(frame, mapx, mapy, cv2.INTER_LINEAR)


while(cap.isOpened()):
    ret, frame = cap.read()
   # frame =
    cv2.imshow('frame', undistort(frame))

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()


 

  • 9
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值