python opencv实现图片/短视频一键水印
澳门市望德堂区
2025-06-24 12:48:06
0
目录。
- 0 前言。
- 1 准备工作。
- 2 读取图片或视频。
- 3 添加回调获取鼠标绘制水印区域。
- 4 调用opencv函数。
- 5 画蒙版主循环。
- 6 去水印主循环。
- 总结。
0 前言。
在制作pt个人文章或共享图片的过程中c;经常会遇到一些带水印的情况,很多人都希望去除这些水印,提高图片和视频的观看体验。本文将介绍如何使用Python+opencv实现了图像的去水印功能。
👉 点击链接体验在线demo。
1 准备工作。
首先,OpenCV和NumPy库需要导入。OpenCV是一个开源计算机视觉库,可用于图像和视频处理Numpy是Python的科学计算库,提供高性能的多维数组对象。
import。cv2。import。numpy。 as。np。
2 读取图片或视频。
代码,我们定义了变量pmode来指定处理模式,可以是"image"或"video"。当pmode"image"时,我们从指定的路径读一张图片;当pmode"video"时,我们通过cv2.VideoCapture()函数从指定路径读取视频。
pmode。="image"path。 ="316.jpg"#切记不要有中文路径。vieodpath。="350.mp4"cap。=cv2。.。VideoCapture。(。vieodpath。)。if。pmode。=="video":。ret。,img。 =cap。.。read。(。)。else。:。img。 =cv2。.。imread。(。path。)。height。,width。 =img。.。shape。[。0:。2。]。
3 添加回调获取鼠标绘制水印区域。
接下来,图片的高度和宽度,并定义了一些全球变量,用于记录鼠标事件的状态和坐标。同时,我们创建了一个与窗口绑定的回调函数,实现鼠标事件的交互操作。
# 鼠标回调函数。def。draw_circle。(。event。,x。,y。,flags。,param。)。:。global。ix。,iy。,drawing。,mode。,img。 if。event。 ==cv2。.。EVENT_LBUTTONDOWN。:。drawing。 =True。ix。,iy。 =x。,y。 elif。event。 ==cv2。.。EVENT_MOUSEMOVE。:。if。drawing。 ==True。:。if。mode。 ==True。:。cv2。.。rectangle。(。mask。,(。ix。,iy。)。,(。x。,y。)。,(。0,255。,0)。,-。1。)。cv2。.。rectangle。(。img。,(。ix。,iy。)。,(。x。,y。)。,(。0,255。,0)。,-。1。)。else。:。cv2。.。circle。(。mask。,(。x。,y。)。,5。,(。0,255。,0)。,-。1。)。cv2。.。circle。(。img。,(。x。,y。)。,5。,(。0,255。,0)。,-。1。)。
在鼠标回调函数中,我们根据不同的鼠标事件进行相应的操作。按下鼠标左键时,开始画矩形或圆形,记录起始坐标;当鼠标移动时,xff0c;继续按下鼠标左键,根据当前模式绘制矩形或圆形;释放鼠标左键时,停止画矩形或圆形,最后一个矩形或圆形的绘制按照当前模式完成。
elif。elif。 event。==cv2。.。EVENT_LBUTTONUP。:。 drawing。=False。if。 mode。==True。:。cv2。.。rectangle。(。mask。,(。ix。,iy。)。,(。x。,y。)。,(。0,255。,0)。,-。1。)。cv2。.。rectangle。(。img。,(。ix。,iy。)。,(。x。,y。)。,(。0,255。,0)。,-。1。)。else。:。cv2。.。circle。(。mask。,(。x。,y。)。,5。,(。0,255。,0)。,-。1。)。cv2。.。circle。(。img。,(。x。,y。)。,5。,(。0,255。,0)。,-。1。
)。
4 调用opencv函数。
接下来,我们定义了waterprint()函数,用于去除图片中的水印。在这个函数中c;我们首先定义了要找到的颜色范围,然后将图片转换为HSV色空间并使用cv2.inRange()函数根据颜色范围获得二值图像。然后,我们使用cv2.dilate()函数膨胀二值图像,获得一个掩膜图像。最后,我们使用cv2.inpaint()根据掩膜图像修复函数,水印去除的最终结果。def。waterprint。(。img。)。:。global。 mask。#开始操作。# 设置要找到的颜色范围。 lower_green。=np。.。array。(。[。50。,100。,100。]。)。 upper_green。=np。.。array。(。[。70。,255。,255。]。)。 hsv。=cv2。.。cvtColor。(。mask。,cv2。.。COLOR_BGR2HSV。)。 thresh。=cv2。.。inRange。(。hsv。,lower_green。,upper_green。)。 scan。=np。.。ones。(。(。5。,5。)。,np。.。uint8。)。 cor。=cv2。.。dilate。(。thresh。,scan。,iterations。=1。)。 dst。=cv2。.。inpaint。(。img。,cor。,3。,cv2。.。INPAINT_TELEA。
)。
5 画蒙版主循环。
主程序,我们创建了一个窗口,并将回调函数绑定到窗口。然后,我们进入一个循环,原始图片不断显示并根据按钮的操作切换绘制模式,生成掩膜图像,以及退出程序。while。(。1。)。:。cv2。.。imshow。(。'image',img。)。 k。=cv2。.。waitKey。(。1。)。&0xFF。if。 k。==ord。(。'm')。:。 mode。=not。 mode。elif。 k。==ord。(。's')。:。 mask。=np。.。zeros。(。img。.。shape。[。:。2。]。,dtype。=np。.。uint8。)。contours。, hierarchy。=cv2。.。findContours。(。mask。,cv2。.。RETR_EXTERNAL。,cv2。.。CHAIN_APPROX_SIMPLE。)。for。 contour。in。contours。:。x。,y。,w。, h。=cv2。.。boundingRect。(。contour。)。cv2。.。rectangle。(。mask。,(。x。,y。)。,(。x。+w。,y。+h。)。,(。0,0,0)。,-。1。)。cv2。.。imshow。(。'mask',mask。)。elif。 k。==27。:。break。cv2。.。destroyAllWindows。(。
)。
6 去水印主循环。
处理视频时,我们首先创建了一个视频编写器,并使用cv2.VideoWriter()函数指定输出视频的格式、帧率和大小。然后,我们使用cv2.VideoCapture()函数读取视频的每一帧,并对每一帧进行去水印操作。最后,我们将处理后的帧写入输出视频,并显示处理后的帧。按下键盘上的"s"键,然后停止处理并保存输出视频。最终,我们释放资源关闭窗口。# 创建视频编写器。 fourcc。=cv2。.。VideoWriter_fourcc。(。*。'mp4v')。 out。=cv2。.。VideoWriter。(。'output'+datetime。.。now。(。)。.。strftime。(。"%H-%M-%S")。+'.mp4',fourcc。,20.0。,(。width。,height。)。)。if。pmode。=="video":。if。cap。.。isOpened。(。)。:。cap。.。release。(。)。cap。=cv2。.。VideoCapture。(。vieodpath。)。while。(。cap。.。isOpened。(。)。)。:。ret。, frame。=cap。.。read。(。)。if。ret。:。# 输入输出视频。nowaterprint_frame。=waterprint。(。frame。)。out。.。write。(。nowaterprint_frame。)。# 显示帧。cv2。.。imshow。(。'frame',nowaterprint_frame。)。if。cv2。.。waitKey。(。27。)。&0xFF。==ord。(。's')。:。# 释放资源。break。cap。.。release。(。)。out。.。release。(。)。cv2。.。destroyAllWindows。(。)。else。:。nowaterprint_frame。=waterprint。(。img。)。cv2。.。imshow。(。'frame',nowaterprint_frame。)。cv2。.。waitKey。(。0)。cv2。.。destroyAllWindows。(。
)。
如果处理图片,将waterprint()函数直接调用到水印,并显示处理后的图片。
通过上述代码我们实现了图片和视频的去水印功能。当我们运行代码并选择相应的处理模式时,,水印区可通过鼠标交互操作选择c;并得到去除水印后的结果。所以,我们可以更好地欣赏图片和观看视频,提高视觉体验。
总结。
总结起来,本文介绍了如何使用Python编程语言来实现图片和视频的去水印功能。支持OpenCV和Numpy库,我们可以轻松处理图像和视频并实现自定义图像处理效果。希望本文能帮助大家理解Python图像处理。