为什么要建设旅游网站,wordpress免签约插件,wordpress淘宝客模板图片,如何做彗聪网站呢文章目录 1、准备工作2、原理介绍3、代码实现4、效果展示5、参考 1、准备工作
pip install vacm2、原理介绍
在OpenCV中#xff0c;VCAM 库是一个用于简化创建三维曲面、定义虚拟摄像机、设置参数以及进行投影任务的工具。它特别适用于实现如哈哈镜等图像变形效果。
一、VC… 文章目录 1、准备工作2、原理介绍3、代码实现4、效果展示5、参考 1、准备工作
pip install vacm2、原理介绍
在OpenCV中VCAM 库是一个用于简化创建三维曲面、定义虚拟摄像机、设置参数以及进行投影任务的工具。它特别适用于实现如哈哈镜等图像变形效果。
一、VCAM 库的功能
VCAM 库的主要功能包括 创建三维曲面用户可以根据需要定义一个三维曲面这个曲面将作为虚拟镜面的基础。 定义虚拟摄像机用户可以设置虚拟摄像机的各种参数如焦距、位置等以模拟不同的拍摄效果。 投影与重映射将三维曲面上的点投影到虚拟摄像机的成像平面上并生成相应的二维点。这些二维点可以用于图像的重映射从而实现图像的变形效果。
二、使用VCAM库实现哈哈镜效果 获取图像并创建网格首先获取待处理的图像并创建一个与图像大小相同的网格。这个网格将用于表示三维曲面上的点。 定义三维曲面通过修改网格中每个点的Z坐标值来定义一个凹凸不平的三维曲面。这可以通过各种数学函数来实现如正弦函数、余弦函数等。 创建虚拟摄像机并投影使用VCAM库创建一个虚拟摄像机并将定义好的三维曲面投影到虚拟摄像机的成像平面上。这一步将生成对应的二维点集。 图像重映射根据投影得到的二维点集使用OpenCV的remap函数对原始图像进行重映射。重映射的过程将根据二维点集的位置关系将原始图像中的每个像素点映射到新的位置从而实现图像的变形效果。
三、代码示例
以下是一个使用Python和VCAM库实现哈哈镜效果的示例代码
import cv2
import numpy as np
from vcam import vcam, meshGen # 读取图像
img cv2.imread(your_image.jpg)
H, W img.shape[:2] # 创建虚拟摄像机
c1 vcam(HH, WW) # 创建网格
plane meshGen(H, W) # 定义三维曲面例如使用正弦函数来创建波浪形的曲面
plane.Z 10 * np.sin((plane.X / plane.W) * 2 * np.pi * 10) # 获取三维曲面上的点
pts3d plane.getPlane() # 将三维点投影到二维图像坐标
pts2d c1.project(pts3d) # 构建映射函数
map_x, map_y c1.getMaps(pts2d) # 应用映射函数进行图像重映射
output cv2.remap(img, map_x, map_y, interpolationcv2.INTER_LINEAR) # 显示结果
cv2.imshow(Funny Mirror, output)
cv2.waitKey(0)
cv2.destroyAllWindows()四、注意事项 安装VCAM库在使用VCAM库之前需要确保已经正确安装了该库。如果使用的是Python可以通过pip等包管理工具进行安装。 调整参数在使用VCAM库时可以通过调整虚拟摄像机的参数、三维曲面的定义等来实现不同的变形效果。用户可以根据需要进行多次尝试和调整。 性能考虑对于较大的图像或复杂的变形效果图像重映射的过程可能会比较耗时。因此在实际应用中需要考虑性能问题并采取相应的优化措施。
综上所述OpenCV的VCAM库是一个功能强大的工具可以用于实现各种有趣的图像变形效果。通过合理使用该库用户可以轻松地创建出具有创意和趣味性的图像作品。
3、代码实现
# FunnyMirrorsImages.py
import cv2
import numpy as np
import math
from vcam import vcam, meshGenpaths [./chess.jpeg, ./1.jpg, ./2.jpg]for mode in range(8):for i, path in enumerate(paths):# 读取输入图像img cv2.imread(path)img cv2.resize(img, (300, 300))H, W img.shape[:2]# 创建虚拟相机对象c1 vcam(HH, WW)# 创建表面对象plane meshGen(H, W)# 我们生成一面镜子其中对于每个 3D 点其 Z 坐标定义为 Z F(X,Y)if mode 0:plane.Z 20 * np.exp(-0.5 * ((plane.X * 1.0 / plane.W) / 0.1) ** 2) / (0.1 * np.sqrt(2 * np.pi))elif mode 1:plane.Z 20 * np.exp(-0.5 * ((plane.Y * 1.0 / plane.H) / 0.1) ** 2) / (0.1 * np.sqrt(2 * np.pi))elif mode 2:plane.Z - 10 * np.exp(-0.5 * ((plane.X * 1.0 / plane.W) / 0.1) ** 2) / (0.1 * np.sqrt(2 * np.pi))elif mode 3:plane.Z - 10 * np.exp(-0.5 * ((plane.Y * 1.0 / plane.W) / 0.1) ** 2) / (0.1 * np.sqrt(2 * np.pi))elif mode 4: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))elif mode 5: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))elif mode 6:plane.Z 100 * np.sqrt((plane.X * 1.0 / plane.W) ** 2 (plane.Y * 1.0 / plane.H) ** 2)elif mode 7:plane.Z - 100 * np.sqrt((plane.X * 1.0 / plane.W) ** 2 (plane.Y * 1.0 / plane.H) ** 2)else:print(Wrong mode selected)exit(-1)# 提取生成的 3D 平面pts3d plane.getPlane()# 在虚拟相机中投影捕捉平面pts2d c1.project(pts3d)# 为基于网格的扭曲生成映射函数。map_x, map_y c1.getMaps(pts2d)# 生成输出output cv2.remap(img, map_x, map_y, interpolationcv2.INTER_LINEAR)output cv2.flip(output, 1)cv2.imshow(Funny Mirror, output)cv2.imshow(Input and output, np.hstack((img, np.zeros((H, 2, 3), dtypenp.uint8), output)))# 取消注释以下行以保存输出# cv2.imwrite(Mirror-effect-%d-image-%d.jpg%(mode1,i1),np.hstack((img,np.zeros((H,2,3),dtypenp.uint8),output)))cv2.waitKey(0)
4、效果展示
输入图片 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.exp(-0.5 * ((plane.Y * 1.0 / plane.H) / 0.1) ** 2) / (0.1 * np.sqrt(2 * np.pi))plane.Z - 10 * np.exp(-0.5 * ((plane.X * 1.0 / plane.W) / 0.1) ** 2) / (0.1 * np.sqrt(2 * np.pi))plane.Z - 10 * np.exp(-0.5 * ((plane.Y * 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 - 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)plane.Z - 100 * np.sqrt((plane.X * 1.0 / plane.W) ** 2 (plane.Y * 1.0 / plane.H) ** 2)5、参考
https://github.com/kaustubh-sadekar/FunMirrorshttps://github.com/kaustubh-sadekar/VirtualCamOpenCV进阶11使用 OpenCV实现哈哈镜 文章转载自: http://www.morning.rnxw.cn.gov.cn.rnxw.cn http://www.morning.rqsnl.cn.gov.cn.rqsnl.cn http://www.morning.rlqml.cn.gov.cn.rlqml.cn http://www.morning.mfmrg.cn.gov.cn.mfmrg.cn http://www.morning.qnxtz.cn.gov.cn.qnxtz.cn http://www.morning.lokext.com.gov.cn.lokext.com http://www.morning.fmdvbsa.cn.gov.cn.fmdvbsa.cn http://www.morning.kkwgg.cn.gov.cn.kkwgg.cn http://www.morning.zqkr.cn.gov.cn.zqkr.cn http://www.morning.jfqpc.cn.gov.cn.jfqpc.cn http://www.morning.wgxtz.cn.gov.cn.wgxtz.cn http://www.morning.bftr.cn.gov.cn.bftr.cn http://www.morning.yqtry.cn.gov.cn.yqtry.cn http://www.morning.gbrdx.cn.gov.cn.gbrdx.cn http://www.morning.dqbpf.cn.gov.cn.dqbpf.cn http://www.morning.bmts.cn.gov.cn.bmts.cn http://www.morning.nfsrs.cn.gov.cn.nfsrs.cn http://www.morning.bwjws.cn.gov.cn.bwjws.cn http://www.morning.qieistand.com.gov.cn.qieistand.com http://www.morning.cbtn.cn.gov.cn.cbtn.cn http://www.morning.cfocyfa.cn.gov.cn.cfocyfa.cn http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn http://www.morning.kqzt.cn.gov.cn.kqzt.cn http://www.morning.dhrbj.cn.gov.cn.dhrbj.cn http://www.morning.nwjzc.cn.gov.cn.nwjzc.cn http://www.morning.rythy.cn.gov.cn.rythy.cn http://www.morning.xfhms.cn.gov.cn.xfhms.cn http://www.morning.zrdhd.cn.gov.cn.zrdhd.cn http://www.morning.yfphk.cn.gov.cn.yfphk.cn http://www.morning.fbpyd.cn.gov.cn.fbpyd.cn http://www.morning.qrcsb.cn.gov.cn.qrcsb.cn http://www.morning.kgmkl.cn.gov.cn.kgmkl.cn http://www.morning.mgskc.cn.gov.cn.mgskc.cn http://www.morning.jypsm.cn.gov.cn.jypsm.cn http://www.morning.rkypb.cn.gov.cn.rkypb.cn http://www.morning.lsfrc.cn.gov.cn.lsfrc.cn http://www.morning.hxlpm.cn.gov.cn.hxlpm.cn http://www.morning.wlfxn.cn.gov.cn.wlfxn.cn http://www.morning.yrrnx.cn.gov.cn.yrrnx.cn http://www.morning.bwjws.cn.gov.cn.bwjws.cn http://www.morning.rfycj.cn.gov.cn.rfycj.cn http://www.morning.qlckc.cn.gov.cn.qlckc.cn http://www.morning.gnmhy.cn.gov.cn.gnmhy.cn http://www.morning.wkcl.cn.gov.cn.wkcl.cn http://www.morning.djbhz.cn.gov.cn.djbhz.cn http://www.morning.rnxs.cn.gov.cn.rnxs.cn http://www.morning.lcbgf.cn.gov.cn.lcbgf.cn http://www.morning.wkmyt.cn.gov.cn.wkmyt.cn http://www.morning.gybnk.cn.gov.cn.gybnk.cn http://www.morning.mhmcr.cn.gov.cn.mhmcr.cn http://www.morning.xjtnp.cn.gov.cn.xjtnp.cn http://www.morning.ngkng.cn.gov.cn.ngkng.cn http://www.morning.xrlwr.cn.gov.cn.xrlwr.cn http://www.morning.leboju.com.gov.cn.leboju.com http://www.morning.qcnk.cn.gov.cn.qcnk.cn http://www.morning.rcqyk.cn.gov.cn.rcqyk.cn http://www.morning.nzmqn.cn.gov.cn.nzmqn.cn http://www.morning.smpb.cn.gov.cn.smpb.cn http://www.morning.rrxgx.cn.gov.cn.rrxgx.cn http://www.morning.tnjz.cn.gov.cn.tnjz.cn http://www.morning.nshhf.cn.gov.cn.nshhf.cn http://www.morning.yydzk.cn.gov.cn.yydzk.cn http://www.morning.fkcjs.cn.gov.cn.fkcjs.cn http://www.morning.fpczq.cn.gov.cn.fpczq.cn http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn http://www.morning.rnxw.cn.gov.cn.rnxw.cn http://www.morning.zyffq.cn.gov.cn.zyffq.cn http://www.morning.ynjhk.cn.gov.cn.ynjhk.cn http://www.morning.npxcc.cn.gov.cn.npxcc.cn http://www.morning.zqwp.cn.gov.cn.zqwp.cn http://www.morning.fphbz.cn.gov.cn.fphbz.cn http://www.morning.lwxsy.cn.gov.cn.lwxsy.cn http://www.morning.bxrlt.cn.gov.cn.bxrlt.cn http://www.morning.xxzjb.cn.gov.cn.xxzjb.cn http://www.morning.lmctj.cn.gov.cn.lmctj.cn http://www.morning.xoaz.cn.gov.cn.xoaz.cn http://www.morning.rrxmm.cn.gov.cn.rrxmm.cn http://www.morning.tkxyx.cn.gov.cn.tkxyx.cn http://www.morning.bnbtp.cn.gov.cn.bnbtp.cn http://www.morning.ljcjc.cn.gov.cn.ljcjc.cn