有趣的photoshop特效(1):凸透镜python实现
生活随笔
收集整理的這篇文章主要介紹了
有趣的photoshop特效(1):凸透镜python实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、概念
ps中有凸透鏡效果,PS菜單欄->慮鏡->扭曲->球面化,也稱為魚眼效果,即通過凸透鏡所看到的視覺效果。下面來用算法來實現該效果。
二、算法思想
主要應用的是圖像插值算法,以圖像中的一個點為中心,該中心即為透鏡中心,慢慢的往四周插值擴散,如下所示。
實現需要一個映射函數,將原坐標映射到外圍的對應坐標,參考凸透鏡效果算法matlab版。很多函數,只要是凸函數(函數的二階導數大于等于零),都可以實現以上功能,比如y=x^2/r;?y=x^3/r; y = r*log(x+1) / log (r+1),這里我用的是y = x^2/r。其中x是原圖像坐標到圓心的距離,y是映射后的新坐標到圓心的距離。
三、效果
?
四、Python代碼
import cv2 import numpy as np img = cv2.imread('D:/Code/python/Data/dog.jpg') #img = cv2.imread('me.jpg') row, col, dim = img.shape new_img = np.zeros([row, col, dim], dtype=np.uint8)#cv2.imshow('img', img) #cv2.waitKey(0)# center_i = row / 2 center_j = col / 2 radius = min(center_i, center_j) # 防止前面賦值越界# i, j為new_img的坐標,下面要找到原圖像的對應坐標 for i in range(row):for j in range(col):y = np.sqrt((i - center_i)**2 + (j - center_j)**2) # 新坐標i,j與圓心距離new_img[i, j, :] = img[i, j, :]if (y <= radius): # 圓心內的像素要分配新的位置original_i = np.int(np.floor(y*(i-center_i) / radius + center_i)) # 根據現有坐標找回原圖坐標,這里不懂,記錄下來original_j = np.int(np.floor(y*(j-center_j) / radius + center_j))new_img[i, j, :] = img[original_i, original_j, :]cv2.imshow('new_img', new_img) cv2.waitKey(0)?
總結
以上是生活随笔為你收集整理的有趣的photoshop特效(1):凸透镜python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql截取字符串后面四位
- 下一篇: python计时器程序设计总框图_【怎么