首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图像内凹变形

图像内凹变形

作者头像
裴来凡
发布2022-05-29 10:01:54
发布2022-05-29 10:01:54
46400
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
复制
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()

算法:图像内凹形变是通过正弦波形产生内凹形变效果。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档