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

opencv学习(二)图像阈值和平滑处理

  1. 图像阈值

ret, dst = cv2.threshold(src, thresh, maxval, type)

  • src: 输入图,只能输入单通道图像,通常来说为灰度图

  • dst: 输出图

  • thresh: 阈值

  • maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值

  • type:二值化操作的类型,包含以下5种类型:

  1. cv2.THRESH_BINARY: 超过阈值部分取maxval(最大值),否则取0

  1. cv2.THRESH_BINARY_INV :THRESH_BINARY的反转

  1. cv2.THRESH_TRUNC :大于阈值部分设为阈值,否则不变

  1. cv2.THRESH_TOZERO :大于阈值部分不改变,否则设为0

  1. cv2.THRESH_TOZERO_INV :THRESH_TOZERO的反转

python代码及其效果图如下:

import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
%matplotlib inline img=cv2.imread('E:/opencv/open-cv/2-7/dog.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]for i in range(6):plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()

设置阈值,画出对应图像如下图:

可以看出,不同的type其得到的图差距很大。

  1. 图像平滑处理

2.1 读取图像

读取了加噪声的图像,方便后面比较。

img = cv2.imread('E:/opencv/open-cv/2-7/lenaNoise.png')cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 均值滤波

cv2.blur(img,ksize) 均值滤波

  • img:原图像

  • ksize:核大小

  • 原理:它只取内核区域下所有像素的平均值并替换中心元素。

  • 特征:核中区域贡献率相同。

  • 作用:滤除椒盐噪声效果比较好。

blur = cv2.blur(img, (3, 3))cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

对比原来其效果如图所示:

2.3 方框滤波

cv2.boxFilter(img,-1,ksize,normalize=True)

注意函数区别:当normalize=True时,与均值滤波结果相同, normalize=False,表示对加和后的结果不进行平均操作,大于255的使用255表示。

box = cv2.boxFilter(img,-1,(3,3), normalize=True)  cv2.imshow('box', box)
cv2.waitKey(0)
cv2.destroyAllWindows()

normalize=True

normalize=False

其效果对比如如上所示。

2.4 高斯滤波

cv2.GuassianBlur(img, ksize,sigmaX,sigmaY)

其中sigmaX,sigmaY分别表示X,Y方向的标准偏差。如果仅指定了sigmaX,则sigmaY与sigmaX相同。

aussian = cv2.GaussianBlur(img, (5, 5), 1)  cv2.imshow('aussian', aussian)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.5 中值滤波

cv2.medianBlur(img, k)

原理:imgs为原图像,k为方框的尺寸,相当于将方框内的个值进行排序,取中值作为当前值。

python程序和效果图如下:

median = cv2.medianBlur(img, 5)  # 中值滤波cv2.imshow('median', median)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.6 四种滤波算法对比

python代码和图像如下:

res = np.hstack((blur,box1,aussian,median))
#print (res)
cv2.imshow('median vs average', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

http://www.lryc.cn/news/39002.html

相关文章:

  • 【含源码】用python做游戏有多简单好玩
  • C++常用函数
  • Android Framework基础到深入篇
  • 【Go进阶训练营】聊一下go的gc原理
  • 英飞凌Tricore原理及应用介绍05_中断处理之中断路由(IR)模块详解
  • 微搭问答002-移动端上传的文件如何在PC端下载
  • 初识JVM
  • 实践分享:Vue 项目如何迁移小程序
  • JavaScript学习笔记(6.0)
  • 某小公司面试记录
  • SPI读写SD卡速度有多快?
  • MySQL:索引与事物
  • mybatis实战
  • 【UEFI实战】BIOS与IPMI
  • 90%的人都不算会网络安全,这才是真正的白帽子技术【红队】
  • 关于vuex的使用
  • 第53篇-某商城sign参数分析-webpack【2023-03-07】
  • 探秘MySQL——排查与调优
  • 【9.数据页结构】
  • 演唱会总是抢不到票?教你用Python制作一个自动抢票脚本
  • 【系统开发】WebSocket + SpringBoot + Vue 搭建简易网页聊天室
  • Learning C++ No.14【STL No.4】
  • 高速PCB设计指南(八)
  • 什么是腾讯云关系型数据库(MySQL/SQL Server/MariaDB/PostgreSQL详解)
  • 进程通信相关概念
  • 05.Java的运算符
  • 轮转数组(力扣189)
  • 主流的“对象转换工具”使用示例大全以及性能的对比
  • 分享10个不错的C语言开源项目
  • 【阅读笔记】JavaScript设计模式与开发实践2--闭包与单例、策略模式