python + opencv微博图片去水印
- python 3.6.5
- openCV 4.0.1
基本思路:
- 提取ROI(感兴趣的区域,即水印所在的区域)
- 为水印创建蒙层
- 借助水印蒙层对图片进行修补
**提取ROI:**获取水印在图片中所在的区域,即像素值范围。可以有很多工具获得,我使用的是windows自带的画图工具。
使用画图工具获取水印范围后就可以使用切片了,roi = img[930:966,540:690]提取ROI。需要注意的是图片坐标与二维数组位置是相反的,图片坐标(x, y)中x表示像素点到图片左侧的距离,y表示像素点到图片顶部的距离,而二维数组位置(x, y)中x表示该像素点所在行数,y表示该像素点所在列数,两者虽然都是两个数字,但顺序正好相反。
**为水印创建蒙层:**通过对水印logo的观察可以发现,该水印只有一种颜色白色,因此我们只需要对白色这一种颜色进行处理即可。(测试时都是使用微博带水印的图,貌似微博水印都是白色,所以本文的去水印方法应该适用于微博去水印以及其他白色水印,时间原因,暂未做过多测试,在此只讨论方法。)为了精确处理白色,我们可以先将颜色格式有BGR转换为HSV,然后调用inRange()函数对ROI进行二值化处理。
最初看网上教程时对inRange中的范围不知道怎么设置,也不知时什么意义,后来发现都是些特定的HSV数值,根据下表处理自己想要处理的颜色即可。
HSV颜色体系:
二值化蒙层:
图片修复: 将水印二值化处理后需要使用dilate()函数对水印蒙层进行膨胀处理,这样去水印的效果更好。然后就是使用inPaint()函数利用膨胀后的蒙层对ROI进行修补,还原到原图中。
实现代码如下:
import cv2 as cv
import numpy as npclass WaterMark:def Test(self,path):img = cv.imread(path)roi = img[930:966,540:690]cv.imwrite('02.jpg',roi)roi_hsv = cv.cvtColor(roi,cv.COLOR_BGR2HSV)cv.imwrite('hsv.jpg',roi_hsv)lower = np.array([0,0,221])upper = np.array([180,30,255])#创建水印蒙层kernel = np.ones((3,3),np.uint8)print(kernel)cv.imwrite('kernel.jpg',kernel)mask = cv.inRange(roi_hsv,lower,upper)cv.imwrite(r'mask.jpg',mask)#对水印蒙层进行膨胀操作dilate = cv.dilate(mask,kernel,iterations=1)cv.imwrite('dilate.jpg',dilate)res = cv.inpaint(roi,dilate,7,flags=cv.INPAINT_TELEA)cv.imwrite('res.jpg',res)img[930:966,540:690] = rescv.imwrite('modified.jpg',img)if __name__ == '__main__':path = 'girl.jpg'w = WaterMark()w.Test(path)
效果图:
其实微博的水印并不复杂,属于单色系水印,对于这种,其实不一定需要切片获取ROI
代码如下:
import cv2 as cv
import numpy as npclass WaterMark:def Test(self,path):img = cv.imread(path)roi = imgcv.imwrite('02.jpg',roi)roi_hsv = cv.cvtColor(roi,cv.COLOR_BGR2HSV)cv.imwrite('hsv.jpg',roi_hsv)lower = np.array([0,0,221])upper = np.array([180,30,255])#创建水印蒙层kernel = np.ones((3,3),np.uint8)print(kernel)cv.imwrite('kernel.jpg',kernel)mask = cv.inRange(roi_hsv,lower,upper)cv.imwrite(r'mask.jpg',mask)#对水印蒙层进行膨胀操作dilate = cv.dilate(mask,kernel,iterations=1)cv.imwrite('dilate.jpg',dilate)res = cv.inpaint(roi,dilate,7,flags=cv.INPAINT_TELEA)cv.imwrite('res.jpg',res)img = rescv.imwrite('modified.jpg',img)if __name__ == '__main__':path = 'girl.jpg'w = WaterMark()w.Test(path)
python + opencv微博图片去水印相关推荐
- Python OpenCV去除图片水印
问题描述 去除百度水印 1.jpg,背景简单 2.jpg,背景复杂 解决方案 安装 pip install opencv-python pip install numpy 方法一.OpenCV提取颜色 ...
- python opencv调节图片亮度与对比度
python opencv调节图片亮度与对比度 亮度调整是将图像像素的强度整体变大/变小,对比度调整指的是图像暗处变得更暗,亮出变得更亮,从而拓宽某个区域内的显示精度. 创建两个滑动条分别调整对比度和 ...
- python opencv 得到图片路径image_path的宽wide、高heigh和深度deep
python opencv 得到图片路径image_path的宽wide.高heigh和深度deep 图片路径是:'1.jpg' 下面是具体代码: import cv2 #得到图片路径image_pa ...
- 2021-01-07 python opencv调节图片亮度与对比度
python opencv调节图片亮度与对比度 度调整是将图像像素的强度整体变大/变小,对比度调整指的是图像暗处变得更暗,亮出变得更亮,从而拓宽某个区域内的显示精度. 创建两个滑动条分别调整对比度和亮 ...
- Java调用opencv实现图片去水印
opencv实现图片去水印案例 Java调用opencv实现图片去水印 环境安装配置 IDEA下开发配置 测试案例 Java调用opencv实现图片去水印 最近项目中遇到个需求,图片去水印下载,由于上 ...
- python opencv获取图片分辨率_python-opencv遍历图片像素,并对像素进行操作
看代码: def access_pixels(frame): print(frame.shape) #shape内包含三个元素:按顺序为高.宽.通道数 height = frame.shape[0] ...
- python +opencv 根据图片定位进行UI自动化
python +opencv 根据图片定位进行UI自动化 前言: 做过移动端ui自动化的小伙伴,就会发现很多控件的元素是一样的或者是找不到的,为了解决这个痛点,于是通过图片灰度处理返回坐标x,y找到控 ...
- python opencv去图片水印
本文转载自:http://blog.csdn.net/androidmylove/article/details/41960111 背景] 最近有一个需要为图片去水印的需求,于是各种折腾开始. [背景 ...
- python爬虫微博图片,pyhton爬虫爬取微博某个用户所有微博配图
前几天写了个java爬虫爬花瓣网,但是事后总感觉不够舒服,终于在今天下午写了个python爬虫(爬微博图片滴),写完之后就感觉舒服了,果然爬虫就应该用python来写,哈哈(这里开个玩笑,非引战言论) ...
最新文章
- 如何设置文字的位置html5,怎么设置文字在表格中的位置
- LeetCode-笔记-231-2的幂
- Eboot 中给nandflash分区实现
- Uboot启动过程详解
- 485. Max Consecutive Ones
- Git 分支相关操作
- AspectJ 在 Spring 中的使用
- maven新建的项目,不自动引入依赖包
- Artstudio Pro Mac(绘图与图片编辑软件)特别版
- Mojoportal 的用户系统
- OpenLayers实例:打开ArcGIS Rest服务
- mysql sql语句优化面试题_SQL面试题之SQL优化
- 基于Proteus仿真8253音乐发生器
- 基础拓扑学笔记(3)——连续映像
- iMeta | 扬州大学杜予州团队揭示同域内同食物的两种昆虫肠道微生物群落装配机制...
- MS2109高清采集卡 HDMI转USB2.0免驱,支持MJPEG YUV数据格式 demo原理图介绍
- 模型可视化工具-netron网页版
- 【HBZ分享】数仓里面的概念-宽表-维度表-事实表概念讲解
- HTML5七夕情人节表白网页制作——蓝色梦幻海洋3D相册—— HTML+CSS+JavaScript
- jmeter-简单接口测试