You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用OpenCV结合自定义内参矩阵和畸变参数对鱼眼图像进行去畸变处理

如何使用OpenCV结合自定义内参矩阵和畸变参数对鱼眼图像进行去畸变处理

我之前做过一个有趣的小实验:用一张灰度值随cos(wx)规律变化的图像,通过自定义内参矩阵和畸变参数,用Python结合OpenCV实现了鱼眼畸变效果,现在把过程和代码分享给你~

先看看实验用到的图像:

  • 原始图像:这是一张呈现周期性明暗条纹的图像,灰度值会随着cos(wx)的变化规律波动
  • 鱼眼畸变后的图像:经过处理后,原本的直线条纹会呈现出明显的向中心凹陷的扭曲效果,是典型的鱼眼镜头视觉特征

下面是实现这个效果的核心Python代码:

import numpy as np
import cv2

def fisheye_effect(original_img):
    # 获取原始图像的高度和宽度
    h, w = original_img.shape[:2]
    # 自定义内参矩阵K:焦距设为图像宽高,主点位于图像中心
    K = np.array([[w, 0, w / 2],
                  [0, h , h / 2],
                  [0, 0, 1]])
    # 自定义鱼眼畸变参数D:前两个参数控制畸变程度,后两个设为0
    D = np.array([2.0, 1.0, 0, 0])        
    # 生成畸变映射表
    map1, map2 = cv2.fisheye.initUndistortRectifyMap(K, D, None, K, (w, h), cv2.CV_16SC2)
    # 应用映射表得到鱼眼畸变图像
    fisheye_img = cv2.remap(original_img, map1, map2, interpolation=cv2.INTER_LINEAR, borderMode=cv2.BORDER_CONSTANT)
    # 保存处理后的图像(注意这里的fisheye_path需要你提前定义好保存路径)
    cv2.imwrite(fisheye_path, fisheye_img)

简单解释下代码里的关键步骤:

  1. 先获取原始图像的尺寸,这是定义内参矩阵的基础
  2. 内参矩阵K:这里我们把x和y方向的焦距分别设为图像的宽度和高度,主点(图像光学中心)放在图像的中心位置,这是比较常用的自定义内参设置方式
  3. 畸变参数D:鱼眼畸变的参数通常有4个,前两个参数主要控制畸变的程度,数值越大畸变效果越明显,后两个参数我们暂时设为0即可
  4. cv2.fisheye.initUndistortRectifyMap函数会根据我们设置的内参和畸变参数,生成用于图像映射的查找表,这一步是鱼眼畸变处理的核心
  5. 最后用cv2.remap把原始图像按照生成的映射表进行变换,就能得到我们想要的鱼眼畸变效果了

备注:内容来源于stack exchange,提问作者Nightysky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 14:24:33