护卫神做的网站访问,私自搭建vps犯法吗,网站建设啊,和田哪里有做网站的地方RGB色彩模式是工业界的一种颜色标准#xff0c;是通过对红#xff08;R#xff09;、绿#xff08;G#xff09;、蓝#xff08;B#xff09;三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的#xff0c;RGB即是代表红、绿、蓝三个通道的颜色#xff…RGB色彩模式是工业界的一种颜色标准是通过对红R、绿G、蓝B三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的RGB即是代表红、绿、蓝三个通道的颜色这个标准几乎包括了人类视力所能感知的所有颜色是运用最广的颜色系统之一。
RGB 模式的彩色图像在读入 OpenCV 内进行处理时会按照行方向依次读取该 RGB 图像的 B 通道、G 通道、R 通道的像素点并将像素点以行为单位存储在 ndarray 的列中。例如有一幅大小为 R 行×C 列的原始 RGB 图像其在 OpenCV 内以 BGR 模式的三维数组形式存储。
import numpy as np
import matplotlib.pyplot as plt
import cv2
imgcv2.imread(img\GDP.JPG)h,w,limg.shape
img.shape(347, 496, 3)注数据存储格式每个单元数据范围在0~255RGB中255255255为白色000为黑色在二位平面图上原点00在图的左下角。 1. 按水印颜色范围滤除水印或按曲线颜色提取图形
按水印颜色范围滤除水印方案主要是针对简单、水印背景颜色单一例如上图中的灰色。使用windows系统自带工具“图画”获取RGB颜色值。 如图中选中1号位置取色器放置到水印图标上2号位置通过3号位置的颜色编辑器获取颜色数值。默认灰色为128128128 R242G242B244
删除灰色以及临近灰色同时也可能把临近的灰色坐标也删除删除就删除了吧下一篇再说用处。
import numpy as np
import matplotlib.pyplot as plt
import cv2
imgcv2.imread(img\GDP.JPG)h,w,limg.shape
img.shapefor j in range(h):for k in range(w):# 删除灰色水印if img[j][k][0] 128 and img[j][k][1] 128 and img[j][k][2] 128 :img[j][k][0] 255img[j][k][1] 255 img[j][k][2] 255# 删除标题if img[j][k][0] 150 and img[j][k][1] 150 and img[j][k][2] 150 :img[j][k][0] 255img[j][k][1] 255 img[j][k][2] 255 plt.imshow(img,cmapplt.cm.gray)cv2.imshow(Image, img)
cv2.waitKey(0)
cv2.destroyAllWindows()对比Open CV输出BGR颜色发生了变化。 对于背景复杂的情况如下图所示采用直接提取曲线的方案。
for j in range(h):for k in range(w):if img[j][k][0] 140 or img[j][k][0] 170 or img[j][k][1] 195 or img[j][k][1] 215 or img[j][k][2] 48 or img[j][k][2] 129:img[j][k][0] 255img[j][k][1] 255 img[j][k][2] 2552. Open CV图像修复去除水印
2.1. 图片抠图去水印的思路 准备一张有水印的图片 此图命名为heart.JPG。 用绘画工具在有水印的图片上框出水印位置 此图命名为heart_mask.jpg标注水印位置实际应用中不带外边框就是个白色矩形可参见后续灰色图像效果。 利用findContours函数查找水印所在的位置 初始化一个与原图像大小相同的0矩阵 将获取到的水印图片定位到初始化的矩阵中 利用inpaint函数进行水印的去除
2.2. 实践案例及代码
import cv2
import numpy as np# 读取模板图像
image cv2.imread(img\heart_mask.jpg)
image_gray cv2.cvtColor(image, cv2.COLOR_BGRA2GRAY) # 转换成灰度图col,row,l image.shape
print(col,row)# 初始化一个与原图像等同的矩阵
temp np.zeros((col,row))
temp temp.astype(np.uint8)cv2.imshow(gary, image_gray)
cv2.waitKey(0)# 查找图像中的矩阵
ret,thresh cv2.threshold(image_gray, 250, 255, cv2.THRESH_BINARY)
contours, hierarchy cv2.findContours(thresh, 2, 1)
cntcontours[0]
x, y, w, h cv2.boundingRect(cnt)
print(x, y, w, h)
# 由于背景太简单识别矩形失败替换为手工标注
x 536
y 240
w 91
h 94
img cv2.rectangle(image, (x, y), (x w, y h), (0, 255, 0), 2) cv2.imshow(gary, img)
cv2.waitKey(0)# 显示水印图片
image2 cv2.imread(img\heart.JPG)
roi image2[y:yh,x:xw,0:3]
roi cv2.cvtColor(roi, cv2.COLOR_BGRA2GRAY)
ret,roi cv2.threshold(roi, 80, 90, cv2.THRESH_BINARY) # 参数可调节因图片的像素而异
roi cv2.morphologyEx(roi,cv2.MORPH_ELLIPSE,(5,5)) # 将水印图片赋值给初始化的矩阵图片
roi2 temp[y:yh,x:xw]
roi3 cv2.add(roi, roi2)
temp[y:yh,x:xw] roi3dst cv2.inpaint(image2, temp, 30, cv2.INPAINT_NS) # 使用INPAINT_TELEA算法进行修复
cv2.imshow(TELEA, dst)
cv2.waitKey(0)2.3. 关键图像处理技术
2.3.1. 图像阈值处理cv2.threshold
阈值的作用是根据设定的值处理图像的灰度值比如灰度大于某个数值像素点保留。通过阈值以及有关算法可以实现从图像中抓取特定的图形比如去除背景等。
cv2中单阈值函数cv2.threshold(src, thresh, maxval, type[, dst])返回值为retval, dst
其中
src是灰度图像thresh是起始阈值maxval是最大值type是定义如何处理数据与阈值的关系。有以下几种
选项像素值thresh其他情况cv2.THRESH_BINARYmaxval0cv2.THRESH_BINARY_INV0maxvalcv2.THRESH_TRUNCthresh当前灰度值cv2.THRESH_TOZERO当前灰度值0cv2.THRESH_TOZERO_INV 0当前灰度值 另外的取值为 cv2.THRESH_OTSU使用最小二乘法处理像素点而cv2.THRESH_TRIANGLE使用三角算法处理像素点。一般情况下cv2.THRESH_OTSU适合双峰图。cv2.THRESH_TRIANGLE适合单峰图。单峰图或者双峰图指的是灰度直方图。 2.3.2. 形态学操作开闭运算morphologyEx函数
开运算基本原理
图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后去除了噪声但是也压缩了图像接着对腐蚀过的图像进行膨胀处理可以去除噪声并保留原有图像。
开运算实际是先腐蚀运算再膨胀运算把看上去把细微连在一起的两块目标分开了。
一般来说开运算可以使图像的轮廓变得光滑还能使狭窄的连接断开和消除细毛刺。开运算在过滤噪声的同时并没有对物体的形状、轮廓造成明显的影响这是一大优势。当只关心物体的位置或者个数时物体形状的改变不会给任务带来困扰此时用开运算处理具有处理速度上的优势。
闭运算基本原理
闭运算是开运算的相反操作先膨胀运算再腐蚀运算处理后的图片看上去将两个细微连接的图块连接在一起。
闭运算同样可以使得图像变得光滑并且能够填平图像中的凹陷即小孔弥合小裂缝而图像中目标的位置和形状可以保持不变。因此在图像去噪中闭运算也是常用操作。
开运算、闭运算在 OpenCV 中可以使用形态学滤波函数morphologyEx()来进行。函数原型为cv2.morphologyEx(src, op, kernel)
src输入图像即源图像填Mat类的对象即可op: 表示形态学运算的类型可以是如下之一的标识符 MORPH_OPEN 开运算Opening operationMORPH_CLOSE 闭运算Closing operationMORPH_GRADIENT 形态学梯度Morphological gradientMORPH_TOPHAT “顶帽”“Top hat”MORPH_BLACKHAT “黑帽”“Black hat”MORPH_ERODE “腐蚀”MORPH_DILATE “膨胀”。 kernel形态学运算的内核。若为NULL时表示的是默认使用参考点位于中心3 x 3的核。一般使用函数getStructuringEleme nt()配合这个参数的使用。getStructuringElement()函数会返回指定形状和尺寸的结构元素内核矩阵。
2.3.3. 数字修复算法cv2.inpaint
修复是图像插值。数字修复算法在图像插值照片恢复缩放和超分辨率等方面具有广泛的应用。
大多数人会在家里放一些旧的退化照片上面有一些黑点一些笔画等。你有没有想过恢复它我们不能简单地在绘画工具中擦除它们因为它将简单地用白色结构替换黑色结构这是没有用的。在这些情况下使用称为图像修复的技术。基本思路很简单用邻近的像素替换那些坏标记使其看起来像是邻居取自维基百科考虑下面显示的图像
库函数 dst cv2.inpaintsrcmask, inpaintRadiusflags
参数是
src输入8位1通道或3通道图像。inpaintMask修复掩码8位1通道图像。非零像素表示需要修复的区域。dst输出与src具有相同大小和类型的图像。inpaintRadius算法考虑的每个点的圆形邻域的半径。flags INPAINT_NS基于Navier-Stokes的方法Alexandru Telea的INPAINT_TELEA方法
3. 第三方开源修复工具Lama Cleaner
Lama Cleaner 是由 SOTA AI 模型提供支持的免费开源图像修复工具。可以从图片中移除任何不需要的物体、缺陷和人或者擦除并替换powered by stable diffusion图片上的任何东西。
详见“python抠图去水印开源库lama-cleaner入门应用实践”。
参考
[1]. 肖永威. python抠图去水印开源库lama-cleaner入门应用实践. CSDN博客. 2023.09
[2]. 风华明远. CV2简单阈值函数cv2.threshold(). CSDN博客. 2020.12
[3]. 奔向理想的星辰大海. 【Python】Python 去除图片水印. CSDN博客. 2023.08
[4]. 小鹏AI. OpenCV 图片去水印不需要自己做水印模板. CSDN博客. 2020.05
[5]. wp猿. opencv之形态学操作开闭运算morphologyEx函数. CSDN博客. 2022.01
[6]. mjiansun. 【Python】OpenCV中的cv2.inpaint()函数. CSDN博客. 2021.07