import matplotlib.pyplot as plt
import numpy as np
import math
import cv2
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png')#读取图像
cv2.imshow('Lena',img)
#获取圆形区域的中心坐标
x0=img.shape[0]//2
y0=img.shape[1]//2
#通过圆形区域半径构造展开后的图像
Lena_height=radius=img.shape[0]//2
Lena_width=int(2*math.pi*radius)
Lena_img=np.zeros((Lena_height,Lena_width,3),dtype="u1")
except_count=0
for j in range(Lena_width):
theta=2*math.pi*(j/Lena_width)-1/2*math.pi
for i in range(Lena_height):
Lena_radius=radius-i
x=Lena_radius*math.sin(theta)+x0
y=Lena_radius*math.cos(theta)+y0
x,y=int(x),int(y)
try:
Lena_img[i,j,:]=img[x,y,:]
except:
continue
print(except_count)
cv2.imwrite('C:/Users/xpp/Desktop/Lena.png',Lena_img)
cv2.imshow('Lena',Lena_img)
cv2.waitKey(0)
算法:图像反转是通过原始图像中被展开的圆形区域参数构造逆时针展开后的矩形区域,然后根据坐标映射关系将像素值依次填充进去即可。一个标准的圆形区域展开为矩形区域,而展开后的矩形区域高度即是圆形区域的半径r,展开后的矩形区域长度自然是2Πr。 注意:加入了捕获异常代码防止超出原始图像的边界的情况发生。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!