基于Python-Opencv实现哈哈镜效果
参考原项目地址:https://github.com/spmallick/learnopencv/tree/master/FunnyMirrors
原理
3D点和图像中的像素点具有的等式映射关系:
1.创建虚拟相机,本质上式中P
2.定义3D面
原始图像为2D,将原始相机表示为虚拟相机中的3D面,我们用以下三种表示:
- plane.Z += 20np.exp(-0.5((plane.X1.0/plane.W)/0.1)**2)/(0.1np.sqrt(2*np.pi))
- 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))
- 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实现哈哈镜效果相关推荐
- 基于python opencv人脸识别的签到系统
基于python opencv人脸识别的签到系统 前言 先看下效果 实现的功能 开始准备 页面的构建 功能实现 代码部分 总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人 ...
- 使用OpenCV实现哈哈镜效果
使用OpenCV实现哈哈镜效果 导入工具包 import cv2 import numpy as np import math from vcam import vcam,meshGen #导入pyt ...
- 基于python+OpenCV的车牌号码识别
基于python+OpenCV的车牌号码识别 车牌识别行业已具备一定的市场规模,在电子警察.公路卡口.停车场.商业管理.汽修服务等领域已取得了部分应用.一个典型的车辆牌照识别系统一般包括以下4个部分: ...
- 基于Python+OpenCV车道线检测(直道和弯道)
基于Python+OpenCV车道线检测(直道和弯道) 基于Python+OpenCV车道线检测(直道和弯道)
- 【开源分享】基于Python+OpenCV+PyQt5车牌识别(GUI界面)
亲测无错:基于Python+OpenCV+PyQt5车牌识别(GUI界面)绝对可以用的!!!!! 基于Python+OpenCV+PyQt5车牌识别(GUI界面) 参考文档
- 基于python+opencv的图像目标区域自动提取
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx 一.提取纸张中的内容 一张照片中的感兴趣区域总是沿着x,y,z三个轴都有一定倾斜(如下图),要 ...
- 基于python+openCV的中值滤波
先直接来一个3×3的吧 def median(src_img, filter_size, channels):# 首先,定义一个大小为9的0数组# list = [[0, 0, 0, 0, 0, 0, ...
- 基于python+opencv+pyautogui的图像识别点击
第一次发文没啥经验 很多都是借鉴若有侵权请告知 必更改 开源代码只供学习交流请勿用作其他用途!!! get_img()#这个函数是获取rgb格式屏幕截图,可用于截图一次识别多个元素 imgclick( ...
- 基于Python+OpenCV的人脸识别实现带墨镜效果
环境以及执行步骤 相关介绍 环境配置 相关库安装介绍 上代码 github地址 动图介绍 改进 相关介绍 你好! 项目起初来源于一本科生的毕业设计,由于我给了一版更加优秀,所以初始版本的例子给予分享. ...
- python人脸识别opencv_基于python+OpenCV模块的人脸识别定位技术
什么是OpenCV模块 OpenCV是一款跨平台的视觉库,可以支持的操作系统有Linux.Windows和Mac OS操作系统,并且还提供了多种语言的接口,比如Python,java,MATLAB等常 ...
最新文章
- 2016年3月23日作业(项目进度管理、项目成本管理)
- python开发windows界面_electron作为python界面开发入门
- 从字节码角度解释i++和++i
- 前端学习(175):弹窗
- 95-140-132-源码-transform-算子Join
- AVCaptureDevice 属性介绍
- 如何在ADO中使用数据读取器(DataReader)读取数据
- jquery video全屏_帮助你生成全屏视频背景的超棒jQuery插件 BigVideo.js
- (三)DDD上下文映射图——老师,我俩可是纯洁的男女关系!
- adb命令之:手机与电脑文件之间的粘贴复制
- 初中英语语法(008)-动词不定式
- 射频原理图设计checklist
- 看广告赚钱,×××好方法
- iOS系统的优势和特性
- window10总提示幸福倒计时,解决方法
- 台式计算机cpu扣不下去,台式机cpu是不是可以随便更换
- 我的java问题排查工具单
- Android Studio中配置及使用OpenCV示例(一),android应用案例开发大全第四版源码
- 软件KEIL串口应用-- printf调试
- Redis集群部署的三种方式