参考原项目地址:https://github.com/spmallick/learnopencv/tree/master/FunnyMirrors

原理

3D点和图像中的像素点具有的等式映射关系:

1.创建虚拟相机,本质上式中P
2.定义3D面
原始图像为2D,将原始相机表示为虚拟相机中的3D面,我们用以下三种表示:

  1. plane.Z += 20np.exp(-0.5((plane.X1.0/plane.W)/0.1)**2)/(0.1np.sqrt(2*np.pi))
  2. plane.Z += 20np.sin(2np.pi*((plane.X-plane.W/4.0)/plane.W)) + 20np.sin(2np.pi*((plane.Y-plane.H/4.0)/plane.H))
  3. plane.Z -= 100np.sqrt((plane.X1.0/plane.W)**2+(plane.Y*1.0/plane.H)**2)
    3.虚拟相机捕获面,得到2D平面,根据原图与2D坐标间的对应关系进行重映射。

代码

mport cv2
import numpy as np
import math
from vcam import vcam,meshGen# 读入输入图
img = cv2.imread("4.png")
H,W = img.shape[:2]# 创建虚拟相机
c1 = vcam(H=H,W=W)# 创建物体表面
plane = meshGen(H,W)#原始图像表示为虚拟相机的3D面,此时注意Z坐标不同的表示,得到不同的效果
# plane.Z += 20*np.exp(-0.5*((plane.X*1.0/plane.W)/0.1)**2)/(0.1*np.sqrt(2*np.pi))
# plane.Z += 20*np.sin(2*np.pi*((plane.X-plane.W/4.0)/plane.W)) + 20*np.sin(2*np.pi*((plane.Y-plane.H/4.0)/plane.H))
plane.Z -= 100*np.sqrt((plane.X*1.0/plane.W)**2+(plane.Y*1.0/plane.H)**2)
pts3d = plane.getPlane()pts2d = c1.project(pts3d)#虚拟相机中捕获面,得到2D平面
map_x,map_y = c1.getMaps(pts2d)#进行坐标的重映射,反翘曲,可以防止“孔”
output = cv2.remap(img,map_x,map_y,interpolation=cv2.INTER_LINEAR)cv2.imshow("Funny Mirror",output)
cv2.imshow("Input and output",np.hstack((img,output)))
cv2.waitKey(0)

可视化效果



基于Python-Opencv实现哈哈镜效果相关推荐

  1. 基于python opencv人脸识别的签到系统

    基于python opencv人脸识别的签到系统 前言 先看下效果 实现的功能 开始准备 页面的构建 功能实现 代码部分 总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人 ...

  2. 使用OpenCV实现哈哈镜效果

    使用OpenCV实现哈哈镜效果 导入工具包 import cv2 import numpy as np import math from vcam import vcam,meshGen #导入pyt ...

  3. 基于python+OpenCV的车牌号码识别

    基于python+OpenCV的车牌号码识别 车牌识别行业已具备一定的市场规模,在电子警察.公路卡口.停车场.商业管理.汽修服务等领域已取得了部分应用.一个典型的车辆牌照识别系统一般包括以下4个部分: ...

  4. 基于Python+OpenCV车道线检测(直道和弯道)

    基于Python+OpenCV车道线检测(直道和弯道) 基于Python+OpenCV车道线检测(直道和弯道)

  5. 【开源分享】基于Python+OpenCV+PyQt5车牌识别(GUI界面)

    亲测无错:基于Python+OpenCV+PyQt5车牌识别(GUI界面)绝对可以用的!!!!! 基于Python+OpenCV+PyQt5车牌识别(GUI界面) 参考文档

  6. 基于python+opencv的图像目标区域自动提取

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 一.提取纸张中的内容 一张照片中的感兴趣区域总是沿着x,y,z三个轴都有一定倾斜(如下图),要 ...

  7. 基于python+openCV的中值滤波

    先直接来一个3×3的吧 def median(src_img, filter_size, channels):# 首先,定义一个大小为9的0数组# list = [[0, 0, 0, 0, 0, 0, ...

  8. 基于python+opencv+pyautogui的图像识别点击

    第一次发文没啥经验 很多都是借鉴若有侵权请告知 必更改 开源代码只供学习交流请勿用作其他用途!!! get_img()#这个函数是获取rgb格式屏幕截图,可用于截图一次识别多个元素 imgclick( ...

  9. 基于Python+OpenCV的人脸识别实现带墨镜效果

    环境以及执行步骤 相关介绍 环境配置 相关库安装介绍 上代码 github地址 动图介绍 改进 相关介绍 你好! 项目起初来源于一本科生的毕业设计,由于我给了一版更加优秀,所以初始版本的例子给予分享. ...

  10. python人脸识别opencv_基于python+OpenCV模块的人脸识别定位技术

    什么是OpenCV模块 OpenCV是一款跨平台的视觉库,可以支持的操作系统有Linux.Windows和Mac OS操作系统,并且还提供了多种语言的接口,比如Python,java,MATLAB等常 ...

最新文章

  1. 2016年3月23日作业(项目进度管理、项目成本管理)
  2. python开发windows界面_electron作为python界面开发入门
  3. 从字节码角度解释i++和++i
  4. 前端学习(175):弹窗
  5. 95-140-132-源码-transform-算子Join
  6. AVCaptureDevice 属性介绍
  7. 如何在ADO中使用数据读取器(DataReader)读取数据
  8. jquery video全屏_帮助你生成全屏视频背景的超棒jQuery插件 BigVideo.js
  9. (三)DDD上下文映射图——老师,我俩可是纯洁的男女关系!
  10. adb命令之:手机与电脑文件之间的粘贴复制
  11. 初中英语语法(008)-动词不定式
  12. 射频原理图设计checklist
  13. 看广告赚钱,×××好方法
  14. iOS系统的优势和特性
  15. window10总提示幸福倒计时,解决方法
  16. 台式计算机cpu扣不下去,台式机cpu是不是可以随便更换
  17. 我的java问题排查工具单
  18. Android Studio中配置及使用OpenCV示例(一),android应用案例开发大全第四版源码
  19. 软件KEIL串口应用-- printf调试
  20. Redis集群部署的三种方式

热门文章

  1. 超实用的网页页脚设计小技巧
  2. Android重力感应开发
  3. MYSQL中修改表的字符集
  4. 柠檬 python 培训
  5. 涌泉蜜桔,怎么找到正宗的呢?
  6. Nutanix携手世纪互联 推出超融合解决方案
  7. postgres 数据库架构介绍--1
  8. 理光有邮件服务器吗,理光Aficio 3035复印机通过电子邮件发送扫描文件的设定方法及操作步骤...
  9. excel表格xlsx解开加密软件,excel表格xlsx不能复制打印怎么办?
  10. 如何探索晶体管驱动负载