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)




