python图像模糊处理_python中利用掩模实现图像的高效模糊处理

下面是一个使用Numpy切片的方法将蒙版转换为灰度并在蒙版上找到轮廓

迭代轮廓并提取ROI

模糊每个感兴趣区域并替换为原始图像

输入和屏蔽图像

8a2ed49abf2a4505aa88c2337e296ba5.png

63182c5bf8ff44f91d6ccf2e3f9814a9.png

使用Numpy切片(左)、模糊ROI(右)获取ROI

6838108c50387db83d6328b14a64dbaa.png

29a4201b140c20943dfde939c589948c.png

将模糊的ROI替换回原始图像

228ad293cb92df57fd9b6a4294e3f5d4.png

这种方法应该更

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的Python程序,实现了基本的图像界面,图像上传,结果保存,黑白处理,反色处理,亮度变化,磨皮,素描,瘦脸功能。 ```python import cv2 import numpy as np from tkinter import * from tkinter import filedialog # 定义全局变量 img = None filename = "" # 上传图片 def upload_image(): global img, filename # 打开文件对话框 filetypes = (("JPEG files", "*.jpg"), ("PNG files", "*.png"), ("All files", "*.*")) filename = filedialog.askopenfilename(title="Select a file", filetypes=filetypes) if filename != "": # 读取图片 img = cv2.imread(filename) # 显示图片 cv2.imshow("Image", img) # 保存结果 def save_result(): global img, filename # 打开文件对话框 filetypes = (("JPEG files", "*.jpg"), ("PNG files", "*.png"), ("All files", "*.*")) filename = filedialog.asksaveasfilename(title="Save file as", filetypes=filetypes) if filename != "": # 保存图片 cv2.imwrite(filename, img) # 黑白处理 def black_white(): global img # 转换为灰度图 img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 显示图片 cv2.imshow("Image", img) # 反色处理 def inverse(): global img # 取反色 img = cv2.bitwise_not(img) # 显示图片 cv2.imshow("Image", img) # 亮度变化 def brightness(val): global img # 调整亮度 img = cv2.convertScaleAbs(img, alpha=val/127.0, beta=0) # 显示图片 cv2.imshow("Image", img) # 磨皮 def smoothing(): global img # 高斯模糊 img = cv2.GaussianBlur(img, (0, 0), 5) # 显示图片 cv2.imshow("Image", img) # 素描 def sketch(): global img # 转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 反色 inv = cv2.bitwise_not(gray) # 模糊 blur = cv2.GaussianBlur(inv, (21, 21), 0) # 反色 invblur = cv2.bitwise_not(blur) # 混合 img = cv2.divide(gray, invblur, scale=256.0) # 显示图片 cv2.imshow("Image", img) # 瘦脸 def thin_face(): global img # 读取掩模 mask = cv2.imread("mask.png", cv2.IMREAD_GRAYSCALE) if mask is None: print("Error: mask file not found!") return # 高斯模糊 img = cv2.GaussianBlur(img, (0, 0), 5) # 融合 img = cv2.seamlessClone(img, img, mask, (img.shape[1]//2, img.shape[0]//2), cv2.NORMAL_CLONE) # 显示图片 cv2.imshow("Image", img) # 创建窗口 root = Tk() root.title("Image Processing") # 创建菜单 menubar = Menu(root) root.config(menu=menubar) filemenu = Menu(menubar, tearoff=0) filemenu.add_command(label="Open", command=upload_image) filemenu.add_command(label="Save", command=save_result) filemenu.add_separator() filemenu.add_command(label="Exit", command=root.quit) menubar.add_cascade(label="File", menu=filemenu) # 创建工具栏 toolbar = Frame(root) toolbar.pack(side=TOP, fill=X) Button(toolbar, text="Black & White", command=black_white).pack(side=LEFT, padx=2, pady=2) Button(toolbar, text="Inverse", command=inverse).pack(side=LEFT, padx=2, pady=2) Scale(toolbar, from_=0, to=255, orient=HORIZONTAL, label="Brightness", command=brightness).pack(side=LEFT, padx=2, pady=2) Button(toolbar, text="Smoothing", command=smoothing).pack(side=LEFT, padx=2, pady=2) Button(toolbar, text="Sketch", command=sketch).pack(side=LEFT, padx=2, pady=2) Button(toolbar, text="Thin Face", command=thin_face).pack(side=LEFT, padx=2, pady=2) # 显示窗口 cv2.namedWindow("Image", cv2.WINDOW_NORMAL) cv2.imshow("Image", np.zeros((512, 512, 3), dtype=np.uint8)) root.mainloop() ``` 这个程序使用了OpenCV和Tkinter库来实现图像处理界面,具体实现方法如下: 1. 定义全局变量img和filename,用于保存当前图像和文件名。 2. 实现upload_image函数,用于上传图像文件。该函数使用filedialog库打开文件对话框,读取图像文件并显示在窗口。 3. 实现save_result函数,用于保存处理后的图像。该函数使用filedialog库打开文件对话框,将处理后的图像保存为文件。 4. 实现black_white函数,用于将图像转换为黑白图像。该函数使用cv2库将彩色图像转换为灰度图像,并显示在窗口。 5. 实现inverse函数,用于将图像颜色取反。该函数使用cv2库将图像取反,并显示在窗口。 6. 实现brightness函数,用于调整图像亮度。该函数使用cv2库调整图像亮度,并显示在窗口。 7. 实现smoothing函数,用于实现磨皮功能。该函数使用cv2库对图像进行高斯模糊,并显示在窗口。 8. 实现sketch函数,用于实现素描效果。该函数使用cv2库对图像进行边缘检测和反色等处理,并显示在窗口。 9. 实现thin_face函数,用于实现瘦脸效果。该函数使用cv2库对图像进行高斯模糊和融合处理,并显示在窗口。 10. 创建窗口和菜单。该程序使用Tkinter库创建窗口和菜单,并将图像显示在窗口。 11. 创建工具栏。该程序使用Tkinter库创建工具栏,包含黑白处理、反色处理、亮度调整、磨皮、素描和瘦脸功能的按钮和滑块。 12. 显示窗口。该程序使用cv2库创建窗口,并将窗口显示出来。 注意:此程序只是演示了如何实现上述功能,实际使用时还需要进行更多的优化和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值