opencv-python 图像修复
opencv中的图像修复很简单,用相邻像素替换这些坏标记,使其看起来跟周围颜色一样。
图像修复函数是:inpaint(src,inpaintmask,inpaintradius,flags)
参数说明:
inpaintmask:图像掩码,单通道图像,大小和原图像一致,inpaintmask图像上除了需要修复的部分,其他地方全是0。
inpaintradius:每个点的圆心领域半径。
flags:修复图像的方法。INPAINT_NS(流体力学法), INPAINT_TELET(快速行进法)。
图像修复案例如下:
首先根据待修复图片制作mask。
利用鼠标事件,鼠标在待修复图像上面操作,鼠标左键按下拖动画白线,对应mask同时绘制白线(获取图片和mask):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import cv2 import numpy as np start_point = ( 0 , 0 ) #鼠标开始坐标 lb_down = False #鼠标左键按下的标志,bool型 def mouse_event(event,x,y,flags,param): global start_point,end_point,lb_down #如果全局变量是int或者str,那么如果想要在函数中对函数变量进行修改,则需要 #先在函数内,声明其为global,再进行修改,如果是list或者dict则可以直接修改 if event = = cv2.EVENT_LBUTTONDOWN: #左键按下,更新鼠标坐标,启动按下标志 start_point = (x,y) lb_down = True elif event = = cv2.EVENT_MOUSEMOVE and lb_down: #鼠标移动,绘制线 cv2.line(img,start_point,(x,y),( 255 , 255 , 255 ),thickness = 5 ) cv2.line(mask,start_point,(x,y),( 255 , 255 , 255 ),thickness = 5 ) start_point = (x,y) #只要鼠标移动,就更新鼠标的坐标 elif event = = cv2.EVENT_LBUTTONUP: #左键释放 cv2.line(img,start_point,(x,y),( 255 , 255 , 255 ),thickness = 5 ) #鼠标点击后直接释放鼠标的时候也会绘制一个点 cv2.line(mask,start_point,(x,y),( 255 , 255 , 255 ),thickness = 5 ) lb_down = False cv2.namedWindow( 'image' ) #新建窗口,用来进行鼠标操作 img = cv2.imread( './strawberry.jpg' ) mask = np.zeros(img.shape,np.uint8) #创建一个黑色mask图像 cv2.setMouseCallback( 'image' ,mouse_event) #设置鼠标回调 while True : cv2.imshow( 'image' ,img) cv2.imshow( 'mask' ,mask) if cv2.waitKey( 1 ) = = ord ( 'q' ): #waitKey参数不能写0,写0就需要键盘输入才会继续 break cv2.destroyAllWindows() |
利用获取的mask进行图像修复:
1 2 3 4 5 6 7 8 9 10 11 | import cv2 import numpy as np img = cv2.imread( './image.png' ) mask = cv2.imread( 'mask.png' , 0 ) result = cv2.inpaint(img,mask, 5 ,cv2.INPAINT_TELEA) cv2.imshow( 'img' ,np.hstack((img,result))) cv2.waitKey( 0 ) cv2.destroyAllWindows() |
分类:
opencv-python学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)