前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图像美化

图像美化

作者头像
裴来凡
发布2022-05-29 09:40:40
8460
发布2022-05-29 09:40:40
举报
文章被收录于专栏:图像处理与模式识别研究所
代码语言:javascript
复制
import cv2
import numpy as np
import matplotlib.pyplot as plt
import math
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png')#读取图像
src=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
dst1=np.zeros_like(img)
rows,cols=img.shape[:2]#获取图像行和列
#毛玻璃特效
offsets=5
random_num=0
for y in range(rows-offsets):
    for x in range(cols-offsets):
        random_num=np.random.randint(0,offsets)
        dst1[y,x]=src[y+random_num,x+random_num]
#油漆特效
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
kernel=np.array([[-1,-1,-1],[-1,10,-1],[-1,-1,-1]])#卷积核
#浮雕效果
dst2=cv2.filter2D(gray,-1,kernel)
#素描特效
gaussian=cv2.GaussianBlur(gray,(5,5),0)#高斯滤波
canny=cv2.Canny(gaussian,50,150)#Canny算子
ret,dst3=cv2.threshold(canny,100,255,cv2.THRESH_BINARY_INV)#二值化阈值处理
#怀旧特效
dst4=np.zeros((rows,cols,3),dtype="uint8")
for i in range(rows):
    for j in range(cols):
        B=0.272*img[i,j][2]+0.534*img[i,j][1]+0.131*img[i,j][0]
        G=0.349*img[i,j][2]+0.686*img[i,j][1]+0.168*img[i, j][0]
        R=0.393*img[i,j][2]+0.769*img[i,j][1]+0.189*img[i,j][0]
        if B>255:
            B=255
        if G>255:
            G=255
        if R>255:
            R=255
        dst4[i,j]=np.uint8((B,G,R))
#光照特效
#设置中心点
centerX=rows/2
centerY=cols/2
print(centerX,centerY)
radius=min(centerX,centerY)
print(radius)
strength=200#设置光照强度
dst5=np.zeros((rows,cols,3),dtype="uint8")
for i in range(rows):
    for j in range(cols):
        #计算当前点到光照中心的距离(平面坐标系中两点之间的距离)
        distance=math.pow((centerY-j),2)+math.pow((centerX-i),2)
        #获取原始图像
        B=src[i,j][0]
        G=src[i,j][1]
        R=src[i,j][2]
        if (distance<radius*radius):
            #按照距离大小计算增强的光照值
            result=(int)(strength*(1.0-math.sqrt(distance)/radius))
            B=src[i,j][0]+result
            G=src[i,j][1]+result
            R=src[i,j][2]+result
            B=min(255,max(0, B))
            G=min(255,max(0, G))
            R=min(255,max(0, R))
            dst5[i,j]=np.uint8((B,G,R))
        else:
            dst5[i,j]=np.uint8((B,G,R))
#怀旧特效
dst6=np.zeros((rows,cols,3),dtype="uint8")
for i in range(rows):
    for j in range(cols):
        B=math.sqrt(src[i,j][0])*12
        G=src[i,j][1]
        R=src[i,j][2]
        if B>255:
            B=255
        dst6[i,j]=np.uint8((B,G,R))
#卡通特效
num_bilateral=7#双边滤波
img_color=src#高斯金字塔
for i in range(num_bilateral):
    img_color=cv2.bilateralFilter(img_color,d=9,sigmaColor=9,sigmaSpace=7)#双边滤波处理
img_gray=cv2.cvtColor(src,cv2.COLOR_RGB2GRAY)
img_blur=cv2.medianBlur(img_gray, 7)#中值滤波
img_edge=cv2.adaptiveThreshold(img_blur,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,blockSize=9,C=2)#自适应阈值处理
img_edge=cv2.cvtColor(img_edge,cv2.COLOR_GRAY2RGB)
dst6=cv2.bitwise_and(img_color,img_edge)#与运算
#均衡化特效
dst7=np.zeros((rows,cols,3),dtype="uint8")
(b,g,r)=cv2.split(src)
#彩色图像均衡化
bH=cv2.equalizeHist(b)
gH=cv2.equalizeHist(g)
rH=cv2.equalizeHist(r)
dst7=cv2.merge((bH, gH, rH))
#边缘特效
gaussian=cv2.GaussianBlur(gray,(3,3),0)#高斯滤波
#Scharr算子
x=cv2.Scharr(gaussian,cv2.CV_32F,1,0)
y=cv2.Scharr(gaussian,cv2.CV_32F,0,1)
absX=cv2.convertScaleAbs(x)
absY=cv2.convertScaleAbs(y)
dst8=cv2.addWeighted(absX,0.5,absY,0.5,0)
plt.rcParams['font.sans-serif']=['SimHei']
titles=['原图','毛玻璃','浮雕','素描','怀旧','光照','卡通','均衡化','边缘']
images=[src,dst1,dst2,dst3,dst4,dst5,dst6,dst7,dst8]
for i in range(9):
    plt.subplot(3,3,i+1),plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
if __name__=='__main__':
    plt.show()

230.0 230.0 230.0

算法:图像美化是用计算机对图像进行分析以达到所需效果的技术。

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

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

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

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

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