OpenCV小项目之给图片添加水印

1.准备两张图片(一个原图,一个要添加的水印)

2.原理解析

        要给一张img添加watermark,我们需要从Img选定一个区域,然后将整个区域扣除,并且粘贴上watermark即可实现水印添加。

 2.1具体原理

        如下图,从左往右,首先第1张图片是在原图中扣出该水印的形状,黑色部分像素全为0,第二张图片是把watermark中白色的部分全部去除只保留黑色的像素,第三图为前两张图的叠加。

2.2子流程

        对水印二值化处理过程如下,从左往右第1张图为水印原图,第2张图 为二值化 处理后的黑白图像,第3张图为 第2张图的取反.

然后我们分别将水印图和原图 对上面得到的 第2和第3张图相与,得到我们想要的部分后叠加即可。具体如下:

将原图 与 第3张图 与运算 得到  mask2(最右边的图)

将水印图 与 第2张图 与运算 得到  mask1(最右边的图)

然后 将 mask1和mask2叠加 就得到

3.代码实现

import cv2
import numpy as np

#读取原图和 水印图
img=cv2.imread("wallhaven.png")
watermark=cv2.imread("watermark.jpg")
#水印图较大 不利于展示 这里做缩放处理,根据 屏幕显示情况自行 决定是否缩放
watermark=cv2.resize(watermark,None,fx=0.3,fy=0.3,interpolation=cv2.INTER_AREA)

#提取 原图中我们想要添加水印的 区域    
#这里区域 可以根据 你的喜好随机 选取 区域 添加
roi=img[100:700,300:900]   
 

#将水印转化为灰度图  方便我们 进行 逻辑 与非操作
watermark_gray=cv2.cvtColor(watermark,cv2.COLOR_BGR2GRAY)

#对水印图进行二值化处理   及生成黑白图 
ret,thresh=cv2.threshold(watermark_gray,100,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
not_thresh=cv2.bitwise_not(thresh)


#将水印图中 水印的形状部分像素全部扣出
mark1=cv2.bitwise_and(watermark,watermark,mask=thresh)

#从原图中 扣出水印
mark2=cv2.bitwise_and(roi,roi,mask=not_thresh)

# 两张图叠加  并对 原图 对应区域进行修改 
img[100:700,300:900]=cv2.add(mark1,mark2)

cv2.imshow("watermark",watermark)
cv2.imshow("thresh",thresh)
cv2.imshow("not_thresh",not_thresh)
cv2.imshow("mark1",mark1)
cv2.imshow("mark2",mark2)
cv2.imshow("img",img)
cv2.waitKey(0)

最终效果图:

在Android上使用OpenCV图片添加文字水印可以通过以下步骤实现: 1. 导入OpenCV库:首先需要在Android项目中导入OpenCV库文件,可以从OpenCV官方网站下载或者使用Gradle依赖方式导入。 2. 图片加载:使用Android提供的方式加载需要加水印图片,例如使用BitmapFactory.decodeResource()方法加载本地资源图片,或者使用第三方库加载网络图片。 3. 创建OpenCV Mat对象:使用OpenCV库提供的Mat类,将加载的图片转为Mat对象用于后续操作。可以使用Imgcodecs.imread()方法将Bitmap转为Mat。 4. 添加文字水印:使用OpenCV提供的绘制文本的方法将文字水印添加到Mat对象中。可以使用Imgproc.putText()方法指定水印的位置、文本内容、颜色、字体大小等参数。 5. 转换为Bitmap:将带有水印的Mat对象转换为Bitmap对象。可以使用Bitmap.createBitmap()方法将Mat转为Bitmap。 6. 保存图片:可以选择将带有水印的Bitmap保存到本地存储器或者上传到服务器。使用Bitmap.compress()方法可以将Bitmap对象转为文件输出流,然后保存到指定路径。 需要注意的是,在添加文字水印之前,可能需要对图片进行一些预处理,例如调整大小、旋转、裁剪等操作,可以使用OpenCV提供的相关方法。 以上是使用OpenCV在Android上给图片加文字水印的简要步骤说明,具体实现可以参考OpenCV官方文档和相关示例代码。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值