You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.1 KiB

import cv2
import matplotlib.pyplot as plt
import ImageFilter as filter
import numpy as np
#浮雕
def relief(img, Degree): # 参数为原图像和浮雕图像程度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
h, w = gray.shape[0:2]
# 定义空白图像,存放图像浮雕处理之后的图片
img1 = np.zeros((h, w), dtype=gray.dtype)
# 通过对原始图像进行遍历,通过浮雕公式修改像素值,然后进行浮雕处理
for i in range(h):
for j in range(w - 1):
# 前一个像素值
a = gray[i, j]
# 后一个像素值
b = gray[i, j + 1]
# 新的像素值,防止像素溢出
img1[i, j] = min(max((int(a) - int(b) + Degree), 0), 255)
return img1
#素描
def Nostalgia(img):
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#通过高斯滤波过滤噪声
gaussian = cv2.GaussianBlur(gray, (3,3), 0)
#通过canny算法提取图像轮轮廓
canny = cv2.Canny(gaussian, 50, 140)
#对轮廓图像进行反二进制阈值化处理
ret, result = cv2.threshold(canny, 90, 255, cv2.THRESH_BINARY_INV)
return result
#水墨画
def stylization(img):
result = cv2.stylization(img, sigma_s=60, sigma_r=0.6)
return result
#连环画
#美颜磨皮
def beauty_filter(image):
# 转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 使用Bilateral Filter双边滤波平滑皮肤同时保留边缘细节
bilateral = cv2.bilateralFilter(image, 9, 75, 75)
# 使用Gaussian Blur进一步模糊达到柔化效果
blur = cv2.GaussianBlur(bilateral, (23, 23), 30)
# 计算原图与模糊后的图像的差异
diff = image - blur
# 将差异图与原图融合,控制美颜程度
result = image + diff * 0.5
# 确保像素值不超过255或低于0
result = np.clip(result, 0, 255).astype(np.uint8)
return result
#button3图像转换为灰度图像
def grayscale(image):
global display_img,current_img
return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)