当前位置: 首页 > news >正文

python-使用鼠标对图片进行涂抹自定义绘图

一:可以用鼠标左键按住拖动,路径所过区域就会被“模糊涂抹”。
这种方式非常适合快速搭建简单交互式图片编辑工具!

import cv2
import numpy as np# 读取图片
img = cv2.imread('input.jpg')
img_disp = img.copy()    # 显示用
smudge_radius = 15       # 涂抹半径(像素)
drawing = False          # 鼠标是否按下
prev_pt = None           # 记录上一个点def smudge(img, pt, radius):x, y = pth, w = img.shape[:2]# 限制边界x0, x1 = max(0, x-radius), min(w, x+radius)y0, y1 = max(0, y-radius), min(h, y+radius)roi = img[y0:y1, x0:x1]if roi.shape[0]>1 and roi.shape[1]>1:blur = cv2.blur(roi, (radius*2//3, radius*2//3))img[y0:y1, x0:x1] = blurdef mouse_callback(event, x, y, flags, param):global drawing, prev_pt, img_dispif event == cv2.EVENT_LBUTTONDOWN:drawing = Trueprev_pt = (x, y)smudge(img_disp, (x, y), smudge_radius)elif event == cv2.EVENT_MOUSEMOVE:if drawing and prev_pt is not None:# 连续沿路径涂抹cv2.line(img_disp, prev_pt, (x, y), (255,0,0), 1) # 可视路径(可删)smudge(img_disp, (x, y), smudge_radius)prev_pt = (x, y)elif event == cv2.EVENT_LBUTTONUP:drawing = Falseprev_pt = None# 创建窗口和回调
cv2.namedWindow('Smudge Paint')
cv2.setMouseCallback('Smudge Paint', mouse_callback)while True:cv2.imshow('Smudge Paint', img_disp)key = cv2.waitKey(1)if key == 27:   # ESC退出breakif key == ord('r'):  # 按r重置img_disp = img.copy()cv2.destroyAllWindows()
cv2.imwrite('smudge_result.jpg', img_disp)

说明:
1、按住鼠标左键拖动即可“涂抹”。
2、按r键可以重置为原始图片。
3、涂抹原理:取鼠标周围一定半径区域,做均值模糊,并写回图片。
你可以把smudge函数换为其他混合算法,实现油画等效果。

二: 可以结合 Python、OpenCV 和鼠标事件,实现“自定义绘图方式,生成任意形状遮罩,修复大块杂物/划痕/文字等”。
原理:通过鼠标自由绘制遮罩区域,然后用 OpenCV 的 inpaint 修复工具进行内容感知填充。

import cv2
import numpy as npimg = cv2.imread('input.jpg')
img_disp = img.copy()
mask = np.zeros(img.shape[:2], dtype=np.uint8)drawing = False
ix, iy = -1, -1def draw_mask(event, x, y, flags, param):global drawing, ix, iy, mask, img_dispif event == cv2.EVENT_LBUTTONDOWN:drawing = Trueix, iy = x, yelif event == cv2.EVENT_MOUSEMOVE:if drawing:# 画粗一些的自由笔迹cv2.circle(mask, (x, y), 12, 255, -1)cv2.circle(img_disp, (x, y), 12, (0,0,255), -1)  # 可视化红色笔迹elif event == cv2.EVENT_LBUTTONUP:drawing = Falsecv2.namedWindow('Draw Mask')
cv2.setMouseCallback('Draw Mask', draw_mask)while True:cv2.imshow('Draw Mask', img_disp)key = cv2.waitKey(1)if key == 27:breakif key == ord('r'):  # 重置img_disp = img.copy()mask[:] = 0if key == ord('f'):  # 修复# 用inpaint修复result = cv2.inpaint(img, mask, inpaintRadius=8, flags=cv2.INPAINT_TELEA)cv2.imshow('Inpaint result', result)cv2.imwrite('inpaint_result.jpg', result)cv2.destroyAllWindows()

使用说明
1、拖动鼠标左键,自由在图片上标记修复区域(红色标记,遮罩实际为 mask 数组)。
2、按 f 键,调用 OpenCV inpaint ,被覆盖区域自动内容感知修复(去除涂画的字、斑点、划痕等)。
3、按 r 键重置图片和遮罩。
4、修复结果自动保存为 ‘inpaint_result.jpg’。

http://www.dtcms.com/a/340202.html

相关文章:

  • 数据分析编程 - 从入门到精通
  • 质谱数据分析环节体系整理
  • 容智Report Agent2.0重磅发布!重新定义企业数据分析AI时代
  • Apache ShenYu和Nacos之间的通信原理
  • WPF MVVM进阶系列教程(三、使用依赖注入)
  • 从 H.264/H.265 到 H.266:RTSP播放器的跨代际演进
  • Java开源工具Apache PDFBox(强大的处理 PDF文档工具:创建、读取、修改、解析和提取 PDF)
  • 【数据集】Argoverse 数据集:自动驾驶研究的强大基石
  • 06_并发编程高级特性
  • Jupyter Notebook 的终极进化:VS Code vs PyCharm,数据科学的IDE王者之争
  • 数据库优化提速(一)之进销存库存管理—仙盟创梦IDE
  • 仿真驱动的AI自动驾驶汽车安全设计与测试
  • (Python)[特殊字符] 基于Flask/FastAPI的RESTful API服务 + 数据库 + 缓存 + 简单前端 (Python项目)
  • 【报错】Please do not run this script with sudo bash
  • 自建开发工具IDE(一)之拖找排版—仙盟创梦IDE
  • 网络编程5(HTTPS)
  • CentOS7.9中安装Harbor以及配置https
  • STM32 定时器(级联实现32位定时器)
  • 机器学习数据预处理全流程:从缺失值处理到特征编码
  • Python 全栈开发常用命令
  • 安路EF2系列芯片单口ram ip核使用方法
  • 阿里通义千问Qwen-Long 快速文档解析
  • 【Git】执行命令时要求输入Username、Password
  • RabbitMQ:SpringAMQP Topic Exchange(主题交换机)
  • Flink双流join
  • 【黑客技术零基础入门】PHP环境搭建、安装Apache、安装与配置MySQL(非常详细)零基础入门到精通,收藏这一篇就够
  • (认识异常)
  • 建模工具Sparx EA的多视图协作教程
  • [系统架构设计师]面向服务架构设计理论与实践(十五)
  • Shader学习路线