使用opencv-python对图片进行球面投影
目录
- 效果
- 原理
- 完整代码
效果
将一张拍摄图片进行球面投影,效果如图
原理
由于opencv-python中并没有给出球面投影函数,只能自己手写一套算法,以下是此算法的基本原理:
首先假设原始图片位于一个球体表面,因此拍摄的图片只能反映x、y二维平面的几何关系,不能体现z方向的几何关系,因此需要假设图片位于一个半径为r的球体表面的下半部分,如图:
假设P点为光源,建立一个从P点(0,0,h)到球面上图片上的任意一点P2(x,y,z)映射到平面α的映射关系如图:
可得,P3 = P + k(P2 - P),将P3 = (px,py,pz)带入,得
k = (pz - h)/(z - h)
px = kx
py = ky在上式中,x、y均能从原始图片中直接获得,z则用x、y和假设出来得球半径r来表示:
将上述公式写在代码中,完整代码如下
完整代码
#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对图片进行球面投影相关推荐
- OpenCV + python 实现人脸检测(基于照片和视频进行检测)
OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...
- Opencv - python快速入门
Opencv - python 文章目录 Opencv - python 1. 图像的IO操作 1.1 读取图像 1.2显示图像 1.3 保存图像 1.4 总结 2 绘制几何图形 2.1 绘制直线 2 ...
- OpenCV+python:Canny边缘检测算法
1,边缘处理 图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用. 在空域运算中来说,对图像的锐化就是计算微分.由于数字 ...
- OpenCV Python在计算机视觉中的应用
OpenCV Python教程 在这篇文章中,我们将使用Python中的OpenCv来涵盖计算机视觉的各个方面.OpenCV长期以来一直是软件开发的重要组成部分. 什么是计算机视觉? 我们考虑一个场景 ...
- OpenCV Python教程(2、图像元素的访问、通道分离与合并)
OpenCV Python教程之图像元素的访问.通道分离与合并 转载请详细注明原作者及出处,谢谢! 访问像素 像素的访问和访问numpy中ndarray的方法完全一样,灰度图为: [python] v ...
- python中import cv2遇到的错误及安装方法_独家利用OpenCV,Python和Ubidots来构建行人计数器程序(附代码amp;解析)...
作者:Jose Garcia 翻译:吴振东 校对:张一豪 本文约4000字,建议阅读14分钟. 本文将利用OpenCV,Python和Ubidots来编写一个行人计数器程序,并对代码进行了较为详细的讲 ...
- 如何把OpenCV Python获取的图像传递到C层处理
原文:https://blog.csdn.net/yushulx/article/details/52788051 用OpenCV Python来开发,如果想要用到一些C/C++的图像处理库,就需要创 ...
- openCV—Python(6)—— 图像算数与逻辑运算
openCV-Python(6)-- 图像算数与逻辑运算 一.函数简介 1.add-图像矩阵相加 函数原型:add(src1, src2, dst=None, mask=None, dtype=Non ...
- opencv python 图像去噪
opencv python 图像去噪 文章目录: https://blog.csdn.net/Annihilation7/article/details/82718470 https://segmen ...
- opencv python 中cv2.putText()函数的用法
opencv python 中cv2.putText()函数的用法 文章目录: 一.快速使用 二.官方文档 三.使用举例 虽然用啦很多次,还是决定记录一下 一.快速使用 cv2.putText(ima ...
最新文章
- Linux系统卸载Apache(阿帕奇)环境教程
- Javaweb-----HTTP协议
- [MySQL 5.6] Performance Schema 之 PS配置项(1)
- 能让程序员瞬间崩溃的五个瞬间,共鸣的同学请举手!
- Shell 操作 —— 随机数、定时任务
- 游戏设计创造对话探秘之迭代
- thinkphp生成php文件,thinkphp使用buildHtml生成静态文件的方法
- 判断是否素数 c语言,判断是否是素数 C语言
- 高性能Mysql(一)
- KK模组与普通丝杠模组的区别
- gst-example
- 自然数、实数、整数、有理数的符号表示
- 增程式电动汽车建模与仿真(一)
- OCIOS开发小技巧总结
- STM32+Air202+Air530+HXDZ-30102-ACC心率血氧GPS采集上传到阿里云
- 单片机四个按键做加减乘除功能
- MySQL作为空间数据库
- 一道烧脑的双重否定逻辑题
- BreakPoint Hex Workshop v6.7.3.5308 Incl Keyfilemaker and Patch-EMBRACE
- 荣耀6电信卡显示无服务器,中国电信网上营业厅
热门文章
- 索佳电子水准数据传输软件_徕卡DNA03电子水准仪数据传输步骤
- 用scala写一个基本五级流水线CPU(二)解决数据冒险
- 【预测模型】基于布谷鸟算法改进SVM实现预测matlab代码
- 网课答案公众号小白教程——手把手教你创建自己的大学查题公众号
- 网易云网页端歌单只显示前20首解决方法
- 【Go】小灰灰的数据结构
- 产品设计学习过程中的技术和方法
- halcon采集海康工业相机出错
- matlab分形图 经典的,分形几何中一些经典图形的Matlab画法+[文档在线提供]
- return在python中啥意思_python中return到底什么意思?