import cv2
import math
import numpy as np
image=cv2.imread('C:/Users/xpp/Desktop/Lena.png',cv2.IMREAD_GRAYSCALE)
rows,cols=image.shape
'''
rows = height (y轴)
cols = width (X轴)
'''
output=np.zeros(image.shape,dtype=image.dtype)#创建一个空图像
#垂直方向变形
for i in range(rows):
for j in range(cols):
offset_x=int(50.0*math.cos(2*math.pi*i/180.0))
offset_y=0
if j+offset_x<cols:#X轴方向
output[i,j]=image[i,(j+offset_x)%cols]
else:
output[i,j]=255
cv2.imshow('Original Image',image)
cv2.imshow('Vertical wave',output)
#水平方向变形
for i in range(rows):
for j in range(cols):
offset_x=0
offset_y=int(50.0*math.sin(2*math.pi*j/180.0))
if i+offset_y<rows:#Y轴方向
output[i,j]=image[(i+offset_y)%rows,j]
else:
output[i,j]=255
cv2.imshow('Horizontal wave',output)
#垂直+水平方向变形
for i in range(rows):
for j in range(cols):
offset_x=int(50.0*math.cos(2*math.pi*i/180))
offset_y=int(50.0*math.sin(2*math.pi*j/180))
if j+offset_x<cols and i+offset_y<rows:
output[i,j]=image[(i+offset_y)%rows,(j+offset_x)%cols]
else:
output[i,j]=255
cv2.imshow('Vertical & Horizontal wave',output)
#凹形
for i in range(rows):
for j in range(cols):
offset_x=int(128.0*math.sin(2*math.pi*i/(2*cols)))
offset_y=0
if j+offset_x<cols:
output[i,j]=image[i,(j+offset_x)%cols]
else:
output[i,j]=255
cv2.imshow('Concave wave',output)
cv2.waitKey()
算法:图像内凹形变是通过正弦波形产生内凹形变效果。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!