python - 如何在 OpenCV 中进行变形?
解决方案
您可以使用重新映射。这是一个快速演示,但请注意,您必须知道确切的失真功能才能复制 Photoshop 的功能
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
import math
img = cv.imread('kit.jpg')
right_eye = (215,105)
radius = 30
power = 1.6 # >1.0 for expansion, <1.0 for shrinkage
height, width, _ = img.shape
map_y = np.zeros((height,width),dtype=np.float32)
map_x = np.zeros((height,width),dtype=np.float32)
# create index map
for i in range(height):
for j in range(width):
map_y[i][j]=i
map_x[i][j]=j
# deform around the right eye
for i in range (-radius, radius):
for j in range(-radius, radius):
if (i**2 + j**2 > radius ** 2):
continue
if i > 0:
map_y[right_eye[1] + i][right_eye[0] + j] = right_eye[1] + (i/radius)**power * radius
if i < 0:
map_y[right_eye[1] + i][right_eye[0] + j] = right_eye[1] - (-i/radius)**power * radius
if j > 0:
map_x[right_eye[1] + i][right_eye[0] + j] = right_eye[0] + (j/radius)**power * radius
if j < 0:
map_x[right_eye[1] + i][right_eye[0] + j] = right_eye[0] - (-j/radius)**power * radius
warped=cv.remap(img,map_x,map_y,cv.INTER_LINEAR)
cv.imwrite('warp.jpg', warped)
推荐阅读
- excel - 从另一个工作簿复制几列到当前工作簿和当前工作表
- prometheus - 仅在某个时间点后触发规则
- python - 如何在静态文件中找到图像
- memory - 为什么我的闪存控制寄存器在我写入时没有更新(STM32)?
- xml - 将封装的 XaDES 转换为分离的
- r - 使用 for 循环并提取数据而不重复(dplyr 和 foreach)
- reactjs - 如何为 react-datepicker 赋予初始值?
- docker - 启动 docker-compose.yml 文件时出现问题:[sh: 1: webpack-dev-server: not found, sh: 1: nodemon: not found]
- azure - Azure 函数和容器审计
- openstack - 手动 Openstack 安装:警告:...没有服务“身份”的策略规则