| import cv2 |
| from PIL import Image, ImageEnhance,ImageColor |
| import gradio as gr |
| import numpy as np |
|
|
| with gr.Blocks() as interface: |
|
|
| with gr.Row(): |
| with gr.Accordion("1.请选择一张待加工图片"): |
| img_input = gr.Image(label='图片',interactive=True) |
| with gr.Accordion("2.可更换勾边颜色,点加工图片"): |
| gr.Markdown("网页版效果更好:https://idalee-draweasy.hf.space") |
| color = gr.ColorPicker(label="勾边颜色") |
| section_btn = gr.Button("加工图片") |
| |
|
|
| |
| |
| |
| |
| |
| with gr.Accordion("【结果】4种勾边效果"): |
| with gr.Row(): |
| closed_output0 = gr.Image(label='简单勾边') |
| closed_output1 = gr.Image(label='常规勾边') |
| |
| |
| |
| |
| |
| with gr.Row(): |
| closed_output2 = gr.Image(label='细致勾边') |
| closed_output3 = gr.Image(label='彩色勾边') |
| |
| |
| |
| |
| |
|
|
| |
| def turn_arguments(img,color): |
| |
| imageX = Image.fromarray(img) |
| contrast = ImageEnhance.Contrast(imageX) |
| imageX = contrast.enhance(1.5) |
| sharpness = ImageEnhance.Sharpness(imageX) |
| imageX = sharpness.enhance(1.5) |
| img = np.asarray(imageX) |
|
|
| |
| |
| |
| gaussian_blur_0 = 13 |
| structuring_element_0 = 3 |
| canny_start_0 = 65 |
| canny_end_0 = 100 |
| thresh_val_0 = 205 |
| maxval_0 = 330 |
| blend = 0.4 |
| gray0 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) |
| |
| gray0 = cv2.GaussianBlur(gray0, (gaussian_blur_0,gaussian_blur_0), 0) |
| |
| edges0 = cv2.Canny(gray0, canny_start_0, canny_end_0) |
| |
| _, thresh0 = cv2.threshold(edges0, thresh_val_0, maxval_0, cv2.THRESH_BINARY) |
| |
| kernel0 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (structuring_element_0, structuring_element_0)) |
| closed0 = cv2.morphologyEx(thresh0, cv2.MORPH_CLOSE, kernel0) |
| closed0 = closed0.astype(img.dtype) |
| result0 = cv2.bitwise_and(img, img, mask=closed0) |
| result0[closed0==0] = (255,255,255) |
| line_color0 = ImageColor.getcolor(color, "RGB") |
| result0[closed0!=0] = (line_color0) |
| close00 = Image.fromarray(result0).convert('RGB') |
|
|
| |
| image0 = Image.fromarray(img) |
| enhancer0 = ImageEnhance.Color(image=image0) |
| |
| |
| |
|
|
|
|
| |
| |
| |
| gaussian_blur_1 = 13 |
| structuring_element_1 = 3 |
| canny_start_1 = 25 |
| canny_end_1 = 45 |
| thresh_val_1 = 205 |
| maxval_1 = 330 |
| gray1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) |
| |
| gray1 = cv2.GaussianBlur(gray1, (gaussian_blur_1,gaussian_blur_1), 0) |
| |
| edges1 = cv2.Canny(gray1, canny_start_1, canny_end_1) |
| |
| _, thresh1 = cv2.threshold(edges1, thresh_val_1, maxval_1, cv2.THRESH_BINARY) |
| |
| kernel1 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (structuring_element_1, structuring_element_1)) |
| closed1 = cv2.morphologyEx(thresh1, cv2.MORPH_CLOSE, kernel1) |
| closed1 = closed1.astype(img.dtype) |
| result1 = cv2.bitwise_and(img, img, mask=closed1) |
| result1[closed1==0] = (255,255,255) |
| line_color1 = ImageColor.getcolor(color, "RGB") |
| result1[closed1!=0] = (line_color1) |
| close01 = Image.fromarray(result1).convert('RGB') |
|
|
| |
| image1 = Image.fromarray(img) |
| enhancer1 = ImageEnhance.Color(image=image1) |
| |
| |
| |
|
|
| |
| |
| |
| gaussian_blur_2 = 13 |
| structuring_element_2 = 3 |
| canny_start_2 = 10 |
| canny_end_2 = 40 |
| thresh_val_2 = 205 |
| maxval_2 = 330 |
| gray2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) |
| |
| gray2 = cv2.GaussianBlur(gray2, (gaussian_blur_2,gaussian_blur_2), 0) |
| |
| edges2 = cv2.Canny(gray2, canny_start_2, canny_end_2) |
| |
| _, thresh2 = cv2.threshold(edges2, thresh_val_2, maxval_2, cv2.THRESH_BINARY) |
| |
| kernel2 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (structuring_element_2, structuring_element_2)) |
| closed2 = cv2.morphologyEx(thresh2, cv2.MORPH_CLOSE, kernel2) |
| closed2 = closed2.astype(img.dtype) |
| result2 = cv2.bitwise_and(img, img, mask=closed2) |
| result2[closed2==0] = (255,255,255) |
| line_color2 = ImageColor.getcolor(color, "RGB") |
| result2[closed2!=0] = (line_color2) |
| close02 = Image.fromarray(result2).convert('RGB') |
|
|
| |
| image2 = Image.fromarray(img) |
| enhancer2 = ImageEnhance.Color(image=image2) |
| |
| |
| |
|
|
| |
| |
| |
| closed3 = closed1.astype(img.dtype) |
| result3 = cv2.bitwise_and(img, img, mask=closed3) |
| result3[closed3==0] = (255,255,255) |
| close03 = Image.fromarray(result3).convert('RGB') |
|
|
| |
| image3 = Image.fromarray(img) |
| enhancer3 = ImageEnhance.Color(image=image3) |
| |
| |
| |
|
|
| |
| return result0,result1,result2,result3 |
| |
| section_btn.click(turn_arguments,inputs=[img_input,color], |
| outputs = [closed_output0,closed_output1,closed_output2,closed_output3]) |
| |
|
|
| interface.launch(show_api=False) |