首页 > 编程语言 >opencv-python 图像修复

opencv-python 图像修复

时间:2023-08-09 22:57:26浏览次数:32  
标签:鼠标 img point python mask cv2 opencv 图像 255

opencv中的图像修复很简单,用相邻像素替换这些坏标记,使其看起来跟周围颜色一样。

图像修复函数是:inpaint(src,inpaintmask,inpaintradius,flags)

参数说明:

inpaintmask:图像掩码,单通道图像,大小和原图像一致,inpaintmask图像上除了需要修复的部分,其他地方全是0。

inpaintradius:每个点的圆心领域半径。

flags:修复图像的方法。INPAINT_NS(流体力学法), INPAINT_TELET(快速行进法)。

图像修复案例如下:

首先根据待修复图片制作mask。

利用鼠标事件,鼠标在待修复图像上面操作,鼠标左键按下拖动画白线,对应mask同时绘制白线(获取图片和mask):

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进行图像修复:

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()

 

  

 

标签:鼠标,img,point,python,mask,cv2,opencv,图像,255
From: https://www.cnblogs.com/libai123456/p/17618201.html

相关文章

  • 利用Python批量替换多个word文档中的指定
    需求最近有一个项目方案,涉及到2000多个文档。之前公司有相关案例,但是需要将2000多个文档中的特殊名称改成现有项目,单独操作需要打开每个文档区搜索替换,费事费力。通过python中对文档的操作进行批量替换。方案思路1.获取所有需要替换的word文件路径defgetdocreplace(path):......
  • Python基础知识总结
     前言     本总结所观看视频如下:变量,数字,字符串,注释_哔哩哔哩_bilibili【Python】3小时不挂_哔哩哔哩_bilibili目录前言一、基本命令 二、基本计算语句 三、字符串操作 四、官方文档的使用五、列表与元组 六、字典 七、集合 八、值类型变量与引用类型变量 九、pr......
  • 外设移除区别/终端记录/重设密码/python测试/数据拷贝最大限度
    1.1【卸载】【弹出】【安全移除驱动器】区别【卸载】只是解除挂载(可以直接重新挂载)【弹出】弹出读卡器里面的存储卡(需要重新插入存储卡)【安全移除驱动器】断掉设备电源,移除设备(需要重新插入设备)1.2记录你的终端操作──script   (点击详细)如果过程不是很长,一屏以内的话一......
  • python虚拟环境
    为不同的项目创建隔离的Python虚拟环境来帮助保持不同项目所需的依赖关系。1.什么是Python环境系统环境变量PATH,当我们在命令行中运行程序时,系统会根据PATH配置的路径列表依次查寻是否有可执行文件python如果在所有路径列表中都查找不到,就会报报错:'python'不是内部或外部命令,也......
  • opencv-python 单应性矩阵的应用
    单应性(Homography)变换:可以简单的理解为它用来描述物体在世界坐标系和像素坐标系之间的位置映射关系。对应的变换矩阵称为单应性矩阵。单应性矩阵在 图像校正、图像拼接、相机位姿估计、视觉SLAM等都有应用。单应性矩阵主要涉及两个函数:1  findHomography(srcPoints,dstPoin......
  • 相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完
    本篇文章主要介绍如何使用相机标定,实现世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系。 相机标定内参/畸变系数求解与外参求解代码: (添加:2022-0926)原理介绍如下: 一、世界坐标系转换为相机坐标系相机标定概念:即求解外参旋......
  • Python基础day63 Django分页和cookie、session
    推导分页的原理分页:当我们要展示的数据特别多的时候,一页展示不完,这个时候我们需要把要展示的数据分成多页展示分页中需要的几个参数:1.总数据有多少条2.每页展示多少条数据(自己规定的20)3.一共展示多少页4.总页数=总数据量/每页展示多少条数据5.当前第几页(前端传过去......
  • 【总结一下|PTA】浙大版《Python 程序设计》题目集
    前言Hello!小伙伴!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖…已保研。目前正在学习C++/Linux/Python学习经验:扎实基础+多做笔记+多......
  • Centos7安装Python3.8
    Centos7安装Python3.8Centos7安装Python3.8安装编译相关工具yum-ygroupinstall"Developmenttools"yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-develyum-yin......
  • python语言--------csv模块将txt文件转换为表格csv格式
    上代码:importcsvcsvFile=open("C:/Users/Administrator/Desktop/1.csv",'w',newline='',encoding='utf-8')writer=csv.writer(csvFile)csvRow=[]f=open("C:/Users/Administrator/Desktop/np.txt",'r'......