目录

  • 效果
  • 原理
  • 完整代码

效果

将一张拍摄图片进行球面投影,效果如图

原理

由于opencv-python中并没有给出球面投影函数,只能自己手写一套算法,以下是此算法的基本原理:

  1. 首先假设原始图片位于一个球体表面,因此拍摄的图片只能反映x、y二维平面的几何关系,不能体现z方向的几何关系,因此需要假设图片位于一个半径为r的球体表面的下半部分,如图:

  2. 假设P点为光源,建立一个从P点(0,0,h)到球面上图片上的任意一点P2(x,y,z)映射到平面α的映射关系如图:

  3. 可得,P3 = P + k(P2 - P),将P3 = (px,py,pz)带入,得
    k = (pz - h)/(z - h)
    px = kx
    py = ky

  4. 在上式中,x、y均能从原始图片中直接获得,z则用x、y和假设出来得球半径r来表示:

  5. 将上述公式写在代码中,完整代码如下

完整代码

#author: FarryNiu
#https://niuzifan.blog.csdn.net/article/details/108394740
import cv2
import numpy as np
img = cv2.imread('ori.jpg')
rows = img.shape[0]
cols = img.shape[1]
blank = np.zeros_like(img)
# blank = np.zeros((4000,4000,3))
#圆心定为图片中心
center_x = int(rows / 2)
center_y = int(cols / 2)
#假设球的半径
r = int(((rows**2+cols**2)**0.5)/2)+20
#假设映射平面位于 z = r 处
pz = r
for x in range(rows):ox = xx = x - center_xfor y in range(cols):oy = yy = y - center_yz = (r*r - x*x - y*y)**0.5#假设光源点为(0,0,2r)k = (pz - 2*r)/(z - 2*r)px = int(k*x)py = int(k*y)px = px + center_xpy = py + center_yblank[px , py, :] = img[ox , oy ,:]
cv2.imwrite('out.jpg',blank)

使用opencv-python对图片进行球面投影相关推荐

  1. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  2. Opencv - python快速入门

    Opencv - python 文章目录 Opencv - python 1. 图像的IO操作 1.1 读取图像 1.2显示图像 1.3 保存图像 1.4 总结 2 绘制几何图形 2.1 绘制直线 2 ...

  3. OpenCV+python:Canny边缘检测算法

    1,边缘处理 图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用. 在空域运算中来说,对图像的锐化就是计算微分.由于数字 ...

  4. OpenCV Python在计算机视觉中的应用

    OpenCV Python教程 在这篇文章中,我们将使用Python中的OpenCv来涵盖计算机视觉的各个方面.OpenCV长期以来一直是软件开发的重要组成部分. 什么是计算机视觉? 我们考虑一个场景 ...

  5. OpenCV Python教程(2、图像元素的访问、通道分离与合并)

    OpenCV Python教程之图像元素的访问.通道分离与合并 转载请详细注明原作者及出处,谢谢! 访问像素 像素的访问和访问numpy中ndarray的方法完全一样,灰度图为: [python] v ...

  6. python中import cv2遇到的错误及安装方法_独家利用OpenCV,Python和Ubidots来构建行人计数器程序(附代码amp;解析)...

    作者:Jose Garcia 翻译:吴振东 校对:张一豪 本文约4000字,建议阅读14分钟. 本文将利用OpenCV,Python和Ubidots来编写一个行人计数器程序,并对代码进行了较为详细的讲 ...

  7. 如何把OpenCV Python获取的图像传递到C层处理

    原文:https://blog.csdn.net/yushulx/article/details/52788051 用OpenCV Python来开发,如果想要用到一些C/C++的图像处理库,就需要创 ...

  8. openCV—Python(6)—— 图像算数与逻辑运算

    openCV-Python(6)-- 图像算数与逻辑运算 一.函数简介 1.add-图像矩阵相加 函数原型:add(src1, src2, dst=None, mask=None, dtype=Non ...

  9. opencv python 图像去噪

    opencv python 图像去噪 文章目录: https://blog.csdn.net/Annihilation7/article/details/82718470 https://segmen ...

  10. opencv python 中cv2.putText()函数的用法

    opencv python 中cv2.putText()函数的用法 文章目录: 一.快速使用 二.官方文档 三.使用举例 虽然用啦很多次,还是决定记录一下 一.快速使用 cv2.putText(ima ...

最新文章

  1. Linux系统卸载Apache(阿帕奇)环境教程
  2. Javaweb-----HTTP协议
  3. [MySQL 5.6] Performance Schema 之 PS配置项(1)
  4. 能让程序员瞬间崩溃的五个瞬间,共鸣的同学请举手!
  5. Shell 操作 —— 随机数、定时任务
  6. 游戏设计创造对话探秘之迭代
  7. thinkphp生成php文件,thinkphp使用buildHtml生成静态文件的方法
  8. 判断是否素数 c语言,判断是否是素数 C语言
  9. 高性能Mysql(一)
  10. KK模组与普通丝杠模组的区别
  11. gst-example
  12. 自然数、实数、整数、有理数的符号表示
  13. 增程式电动汽车建模与仿真(一)
  14. OCIOS开发小技巧总结
  15. STM32+Air202+Air530+HXDZ-30102-ACC心率血氧GPS采集上传到阿里云
  16. 单片机四个按键做加减乘除功能
  17. MySQL作为空间数据库
  18. 一道烧脑的双重否定逻辑题
  19. BreakPoint Hex Workshop v6.7.3.5308 Incl Keyfilemaker and Patch-EMBRACE
  20. 荣耀6电信卡显示无服务器,中国电信网上营业厅

热门文章

  1. 索佳电子水准数据传输软件_徕卡DNA03电子水准仪数据传输步骤
  2. 用scala写一个基本五级流水线CPU(二)解决数据冒险
  3. 【预测模型】基于布谷鸟算法改进SVM实现预测matlab代码
  4. 网课答案公众号小白教程——手把手教你创建自己的大学查题公众号
  5. 网易云网页端歌单只显示前20首解决方法
  6. 【Go】小灰灰的数据结构
  7. 产品设计学习过程中的技术和方法
  8. halcon采集海康工业相机出错
  9. matlab分形图 经典的,分形几何中一些经典图形的Matlab画法+[文档在线提供]
  10. return在python中啥意思_python中return到底什么意思?