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

Opencv 阈值与平滑处理

import cv2	# opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt	# matplotlib是RGB
% matplotlib inline

2.1 灰度图

img = cv2.imread('cat.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2gray)
img_gray.shape()	# (414, 500)
cv2.imshow('img_gray', img_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

2.2 HSV

# 将图像从 BGR(蓝、绿、红)颜色空间转换为 HSV(色相、饱和度、明度)颜色空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

cv2.imshow('hsv', hsv)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


2.3 图像阈值

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

  • src:输入图,只能输入单通道图像,通常来说为灰度图
  • dst:输出图
  • thresh:阈值
  • maxval:当图像超过阈值(或者小于阈值,根据type来决定)所赋予的值
  • type:二值化操作的类型
    • cv2.THRESH_BINARY:超过阈值部分取maxval(最大值),否则取0
    • cv2.THRESH_BINARY_INV:超过阈值的设为0,否则不改变
    • cv2.THRESH_TRUNC:大于阈值部分设为阈值,否则不变
    • cv2.THRESH_TOZERO:大于阈值部分不改变,否则设为0
    • cv2.THRESH_TOZERO_INV:大于阈值设为0,否则不改变
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']

for i in range(6):
    plt.subplot(2, 3, i+1)
    plt.imshow(images[i], 'gray')
    plt.title(titles[i])
plt.show()

在这里插入图片描述


2.4 图像平滑

图像平滑处理是图像处理中的重要技术,旨在通过减少图像中的噪声和细节,使图像看起来更加平滑和连续。

img = cv2.imread('lenaNoise.png')
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

如图有很多噪音点

在这里插入图片描述

2.4.1 均值滤波

原理:通过计算每个像素及其邻域内像素的平均值来替换该像素的值。

效果:能够有效去除随机噪声,但可能会导致图像边缘模糊。

# 使用3×3的均值滤波器
blur = cv2.blur(img, (3, 3))
cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows

在这里插入图片描述

2.4.2 方框滤波

基本和均值滤波一样,可以选择归一化,容易越界

# -1 表示输出图像与输入图像具有相同的深度
box = cv2.boxFilter(img, -1, (3, 3), normalize = False)
"""
normalize用于指定是否对卷积核进行归一化处理。
当为True时该滤波器为均值滤波
当为False时该滤波器为方框滤波
"""

在这里插入图片描述

2.4.3 高斯滤波

原理:使用高斯函数对图像进行加权平均,权重与像素距离中心点的距离成反比。

效果:比均值滤波更好地保留图像的边缘信息。

# 高斯滤波的卷积核里的数值是满足高斯分布,相当于更重视中间的
gussian = cv2.GuassianBlur(img, (5, 5), 1)
# 1表示x方向上的高斯核标准差
cv2.imshow('gussian', gussian)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

2.4.4 中值滤波

原理:将每个像素值替换为其邻域内的中值。

效果:特别适用于去除椒盐噪声,同时保留边缘信息。

# 5表示使用5×5矩阵
median = cv2.medianBlur(img, 5)
cv2.imshow('median', median)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

展示所有处理后图像

# horizontal 水平方向展示
# vstack,vertical,垂直方向展示
res = np.hstack((blur, gussian, median))
cv2.imshow('blur vs gussian vs median', res)
cv2.waitKet(0)
cv2.destroyAllWindows()

在这里插入图片描述

相关文章:

  • 京东外卖举办首批全职骑手代表签约仪式
  • az devops login报错:Failed to authenticate using the supplied token.
  • 广义表(C语言代码链式存储结构)
  • Linux基础33-C语言篇之字符串的基础操作【入门级】
  • 浅入浅出Selenium DevTools
  • 【数据结构】_顺序表
  • SringAop
  • 互联网医院实时数据监测智能分析系统设计概述(上)
  • 基于springboot后台管理的校园网站系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 【HarmonyOS NEXT】控制 WebP 格式动图播放次数的实现方案
  • 【Prometheus】prometheus服务发现与relabel原理解析与应用实战
  • 如何用 Python 进行机器学习
  • python学习七
  • linux上搭建Lago并部署
  • word转换为pdf后图片失真解决办法、高质量PDF转换方法
  • C语言32个关键字
  • 面试【进阶】 —— 说下csr、ssr、ssg 的区别?
  • 【MySQL 的数据目录】
  • Spring Cloud Alibaba与Spring Boot、Spring Cloud版本对应关系
  • 【AIDevops】Deepseek驱动无界面自动化运维与分布式脚本系统,初探运维革命之路
  • 郑州网站建设市场/永久观看不收费的直播
  • 建设部网站首页督办案件/郑州seo培训
  • 怎样做医院网站/百度上海分公司地址
  • 四川做网站设计哪家好/灰色关键词怎么做排名
  • 用php做的网站论文/百度seo教程
  • 教人怎么做网页的网站/成都网络营销公司