当前位置: 首页 > news >正文

day28 学习笔记

文章目录

  • 前言
  • 一、图像添加水印
    • 1.ROI操作
    • 2.添加水印
  • 二、图像去除噪声
    • 1.均值滤波
    • 2.方框滤波
    • 3.高斯滤波
    • 4.中值滤波
    • 5.双边滤波
    • 6.总结


前言

  • 通过今天的学习,我掌握了OpenCV中有关图像水印以及图像去除噪声的原理以及相关操作

一、图像添加水印

1.ROI操作

  • ROI操作即之前学习到的图像切片操作,是为图像添加的水印中的基本步骤
img = cv.imread('img\cat1.png')
roi = img[240:380,350:470]
# roi[:] = (0,0,255)
cv.imshow('roi',roi)
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

tips:对图像切片进行修改也会同时改变原图像,这是由于切片返回的是原图像的一个视图

2.添加水印

  • 可以结合之前学习到的掩膜的思想,分别为水印中的文字或图案以及背景图像制作掩膜,再使用与运算提取出来,最后相加再对原图像待添加位置的切片进行赋值修改即可完成
img1 = cv.imread(r"D:\AI\笔记课件\images\bg.png")
img2 = cv.imread(r"D:\AI\笔记课件\images\logohq.png")h,w = img2.shape[:2]
roi = img1[0:h,0:w]img2_gray = cv.cvtColor(img2,cv.COLOR_BGR2GRAY)_,img2_mask_1 = cv.threshold(img2_gray,thresh=127,maxval=255,type=cv.THRESH_BINARY_INV)
logo = cv.bitwise_and(img2,img2,mask=img2_mask_1)_,img2_mask_2 = cv.threshold(img2_gray,thresh=127,maxval=255,type=cv.THRESH_BINARY)
bg = cv.bitwise_and(roi,roi,mask=img2_mask_2)roi[:] = bg + logo
  • 这里对图像进行二值化操作是根据设定的阈值确定水印的显示区域

二、图像去除噪声

  • 在处理图像时,我们往往不希望图像中存在噪点
  • 所谓的噪点就是指那些与周围点像素值差距很大的像素点
  • 常见的噪声包括:高斯噪声,椒盐噪声等
  • 我们可以使用滤波器(卷积核)对图像中的噪声进行平滑处理

1.均值滤波

  • 均值滤波是一种最简单的滤波处理,它取的是卷积核区域内元素的均值,如以下的3x3卷积核
    x k e r n e l = 1 9 [ 1 1 1 1 1 1 1 1 1 ] xk e r n e l={\frac{1}{9}}{\Bigg[}\begin{array}{l l l}{1}&{1}&{1}\\{1}&{1}&{1}\\{1}&{1}&{1}\end{array}{\Bigg]} xkernel=91[111111111]
  • cv2.blur(src, ksize)
  • src:指输入的图像
  • ksize:指卷积核的大小
img = cv.imread(r"D:\AI\笔记课件\images\lvbo2.png")
img_bulr = cv.blur(img,ksize=(3,3),borderType=cv.BORDER_REFLECT_101)
cv.imshow('bulr',img_bulr)
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

2.方框滤波

  • 与均值滤波相似,只不过卷积核略有差别

k e r n e l = a [ 1 1 1 1 1 1 1 1 1 ] k e r n e l={a}{\Bigg[}\begin{array}{l l l}{1}&{1}&{1}\\{1}&{1}&{1}\\{1}&{1}&{1}\end{array}{\Bigg]} kernel=a[111111111]

  • cv2.boxFilter(src, ddepth,ksize,normalize)
  • ddepth:指输出图像的深度,即输出图像的数据类型
  • normalize:指是否归一化,当normalize为True的时候,方框滤波就是均值滤波,上式中的a就等于1/9;normalize为False的时候,a=1,相当于求区域内的像素和。
img = cv.imread(r"D:\AI\笔记课件\images\lvbo2.png")
img_box_1 = cv.boxFilter(img,-1,(3,3),normalize=True)
img_box_2 = cv.boxFilter(img,-1,(3,3),normalize=False)
cv.imshow('img_box',img_box_2)
cv.waitKey(0)
cv.destroyAllWindows()

3.高斯滤波

  • 高斯滤波是一种十分常用的滤波器,使用高斯核进行卷积
  • 高斯滤波的本质是加权均值,特点是:中间像素权重高,边缘像素权重低
  • 高斯滤波能有效消除高斯噪声,同时保留更多细节,被称为最有用的滤波器
  • cv2.GaussianBlur(src, ksize, sigmaX)
  • sigmaX:该指越大,图像越模糊
img = cv.imread(r"D:\AI\笔记课件\images\lvbo2.png")
img_gauss = cv.GaussianBlur(img,(3,3),1)
cv.imshow('img_gauss',img_gauss)
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

4.中值滤波

  • 中值滤波是一种非线性滤波方法,没有核值,该方法对卷积核内的像素值进行排序,取出中位数作为最终结果
  • 根据该方法的特性,我们可以很容易地去除图像中的孤立点(比如0,255这样的噪声)
  • 我们常常使用中值滤波对椒盐噪声进行处理
  • cv.medianBlur(img,ksize)
img = cv.imread(r"D:\AI\笔记课件\images\lvbo3.png")
img_medium = cv.medianBlur(img,3)
cv.imshow('img_medium',img_medium)
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

5.双边滤波

  • 由于使用之前介绍的滤波方法会模糊掉图像的边缘信息,我们可以使用双边滤波的方法,在去除噪点的同时尽可能保留图像的边缘信息
  • 双边滤波同时考虑了像素点的值域信息和空域信息,前面的滤波方法都只考虑了像素的空域信息,即周围像素的位置,而加入空域信息可以更好地筛选出那些离中心点很近但像素值差距很大的噪点
  • 双边滤波采用了两个高斯滤波的结合,一个负责计算空间邻近度的权值(也就是空域信息),也就是上面的高斯滤波器,另一个负责计算像素值相似度的权值(也就是值域信息),也是一个高斯滤波器
  • cv2.bilateralFilter(src, dsize, sigmaColor, sigmaSpace)
  • 最后两个参数用于指定值域和空域上的sigmaX
img = cv.imread(r"D:\AI\笔记课件\images\lvbo2.png")
img_bilate = cv.bilateralFilter(img,3,100,100)
cv.imshow('img_gauss',img_gauss)
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

tips:在进行滤波计算的过程中,遇到边界没有像素值时默认使用边界反射101进行填充

6.总结

  • 斑点和椒盐噪声优先使用中值滤波。

  • 要去除噪点的同时尽可能保留更多的边缘信息,使用双边滤波。

  • 线性滤波方式:均值滤波、方框滤波、高斯滤波。

  • 非线性滤波方式:中值滤波、双边滤波(速度相对慢)。


THE END

相关文章:

  • 面试题之如何设计一个秒杀系统?
  • LRU Java实现
  • 移动自动化测试-appium
  • jQuery — 动画和事件
  • kimi+deepseek制作PPT
  • 【java实现+4种变体完整例子】排序算法中【桶排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • spring-batch批处理框架(2)
  • 已注册商标如何防止被不使用撤销!
  • UDS中功能寻址可以请求多帧数据嘛?当ECU响应首帧后,诊断仪是通过物理寻址发送流控帧嘛?
  • 如何给云开发生成的智能体增加权限判断
  • 【排队论】Probabilistic Forecasts of Bike-Sharing Systems for Journey Planning
  • NestJS——使用TypeORM连接MySQL数据库(Docker拉取镜像、多环境适配)
  • 文献×材料 | 基于ANSYS的刹车片环保材料分析研究
  • CRC实战宝典:从原理到代码,全面攻克循环冗余校验
  • Transformer 进阶:拥抱预训练模型,迈向实际应用
  • DDPM(diffusion)原理
  • opencv练习
  • 16、堆基础知识点和priority_queue的模拟实现
  • opencv(双线性插值原理)
  • 解决 Vue3 项目中使用 pdfjs-dist 在旧版浏览器中的兼容性问题
  • 62岁中国国际商会副会长、康力电梯创始人王友林逝世
  • “解压方程式”主题沙龙:用艺术、精油与自然的力量,寻找自我疗愈的方式
  • GDP增长6.0%,一季度浙江经济数据出炉
  • 天工摘得全球首个人形机器人半马冠军:中国机器人产业正努力跑向人机共生社会
  • 上海市市长龚正会见英伟达总裁黄仁勋,共创科技发展美好未来
  • 上海一季度人民币贷款增4151亿,住户存款增3134亿