opencv 图像矫正,python+opencv图像处理

  opencv 图像矫正,python+opencv图像处理

  本文主要介绍利用pythonopencv实现对失真图像的校正。用示例代码非常详细的介绍,有一定的参考价值,感兴趣的朋友可以参考一下。

  

代码:

 

  __Author__=Shliang

  _ _ Email _ _= shliang 0603 @ Gmail.com

  导入操作系统

  导入cv2

  将numpy作为np导入

  从tqdm导入tqdm

  def不失真(帧):

  fx=685.646752

  cx=649.107905

  fy=676.658033

  cy=338.054431

  k1,k2,p1,p2,k3=-0.363219,0.093818,0.006178,-0.003714,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)

  返回cv2.remap(frame,mapx,mapy,cv2。INTER _线性)

  #纠正摄像机实时视频流的失真

  def失真_校正_cam():

  cap=cv2。视频捕获(0)

  while (cap.isOpened()):

  ret,frame=cap.read()

  un distort _ frame=un distort(frame)

  compare=np.hstack((frame,undistort _ frame))

  cv2.imshow(帧,比较)

  if cv2 . wait key(1)0x ff==ord( q ):

  破裂

  cap.release()

  cv2.destroyAllWindows()

  #对目录中的所有图片进行失真校正,并保存失真的图片。

  def失真_校正_图像(输入_方向,输出_方向):

  in_imgs=os.listdir(input_dir)

  对于tqdm(in_imgs):中的img_name

  image=cv2 . im read(OS . path . join(input _ dir,img_name))

  distroted_img=未失真(图像)

  cv2 . im write(OS . path . join(output _ dir,img_name),distroted_img)

  if __name__==__main__:

  input _ dir=/home/SHL/extract _ ROS bag _ data/0324 _ bags/ply cal _ calib/root/images

  output _ dir=/home/SHL/extract _ ROS bag _ data/0324 _ bags/ply cal _ calib/root/distro _ imgs

  #失真_校正_图像(输入_方向,输出_方向)

  失真_校正_cam()

  纠正图片:

  原图:

  校正后的图片:

  拍摄的相机图片校正效果:

  从上面的变脸可以看出,左边是未矫正的图,右边是矫正后的图:

  校正后的图片会被裁剪,很明显图片中的信息被裁剪了。例如,左边的椅子被裁剪了。校正后的图片和原始图片保持相同的分辨率:640x480。但是,为什么会看到画面横向拉伸?这是因为在校准相机内部参考时,图片的分辨率设置为1280x720=16:9。但是opencv读数摄像头的默认分辨率是640x480=4:3,两者的比例不一样,所以肯定会有拉伸来解决拉伸,就是在读数摄像头的时候,把摄像头的分辨率设置成和校准的时候一样的分辨率,设置成1280x720。以下是在opencv中读取相机时如何设置相机分辨率:

  #纠正摄像机实时视频流的失真

  def失真_校正_cam():

  cap=cv2。视频捕获(0)

  #获取相机读取的图片的宽度和高度

  width=cap.get(3)

  height=cap.get(4)

  fps=cap.get(5)

  打印(宽度、高度、每秒帧数)# 640.0 480.0 30.0

  #在这里,将相机的分辨率更改为1280x720,这与我们在校准中使用的分辨率相同。

  第一套(31280)

  第一组(4720)

  width=cap.get(3)

  height=cap.get(4)

  打印(宽度、高度、每秒帧数)# 1280.0 720.0 30.0

  while (cap.isOpened()):

  ret,frame=cap.read()

  打印(框架.形状)

  un distort _ frame=un distort(frame)

  compare=np.hstack((frame,undistort _ frame))

  cv2.imshow(帧,比较)

  if cv2 . wait key(1)0x ff==ord( q ):

  破裂

  cap.release()

  cv2.destroyAllWindows()

  重置分辨率后,可以看到校正前后图像对比度后,几乎没有水平或垂直拉伸!

  

参考:

 

  https://blog . csdn . net/weixin _ 40516558/article/details/103494029

  https://blog.csdn.net/guaiderzhu1314/article/details/96306509

  https://www.codenong.com/cs110623399/

  这就是这篇关于用python opencv实现校正失真图像的文章。关于使用python opencv校正扭曲图像的更多信息,请搜索热门IT软件开发工作室之前的文章或继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • opencv图像识别数字,opencv 识别
  • opencv图像识别数字,opencv 识别,如何基于opencv实现简单的数字识别
  • opencv图像的旋转角度计算,opencv图像仿射变换
  • opencv图像的旋转角度计算,opencv图像仿射变换,OpenCV图像几何变换之透视变换
  • opencv图像的旋转角度计算,opencv 旋转任意角度
  • opencv图像的旋转角度计算,opencv 旋转任意角度,opencv图片的任意角度旋转实现示例
  • opencv图像处理函数,opencv图像轮廓合并
  • opencv图像处理函数,opencv图像轮廓合并,OpenCV图像处理之七种常用图像几何变换
  • opencv双线性插值函数,opencv 图像插值
  • LBPH人脸识别,基于opencv的人脸识别技术
  • LBPH人脸识别,基于opencv的人脸识别技术,Opencv LBPH人脸识别算法详解
  • ,,OpenCV黑帽运算(BLACKHAT)的使用
  • opencv双线性插值函数,opencv 图像插值,C++ OpenCV实现图像双三次插值算法详解
  • ,,C语言 OpenCV实现柱面投影
  • ,,C++ Opencv imfill孔洞填充函数的实现思路与代码
  • 留言与评论(共有 条评论)
       
    验证码: