ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

2021-08-26 OpenCV (python)学习笔记(三)

2021-09-05 20:04:37  阅读:304  来源: 互联网

标签:26 img 阈值 python cv2 08 滤波 ksize 图像


OpenCV 基本操作

  • 图像色彩模式转换

st = cv2.cvtColor(src, code)

st:返回处理后的图像;
src:要处理的图像;
code:转换图片的方式,该参数包含很多空颜色空间转换类型;常用标记举例:

  • cv2.COLOR_BGR2GRAY : 从BGR彩色图像转换为GRAY灰度图像;
  • cv2.COLOR_BGR2RGB : 从BGR图像转换为RGB图像;
    更多的值请参考:API文档

图像色彩模式转换代码示例:

import cv2
#读取图片
filename = C:\Users\username\Desktop\opencv
img = cv2.imread(filname + 'picture.jpg')
#将图像转换成灰色图像
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ps:彩色图像与灰色图像的转换是不可逆的。

  • 图像阈值分割

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

ret:当制定了阈值参数thresh,ret就是指定的thresh(一般不用展示,可以随便取);
dst:处理后的单通道图;
src:原图片,只能是单通道图片,通常为灰度图(所以说进行阈值分割前,需要将彩色图像转换成灰度图);
thresh:阈值;
maxval:最大值,当像素值超过了阈值时自动设置为该值;
type:操作类型,即如何处理阈值。该参数包含八种类型的阈值化操作;一下列举五种常用类型:

  • cv2.THRESH_BINARY:超过阈值部分取maxval(最大值),否则取0;
  • cv2.THRESH_BINARY_INV:超过阈值部分取0,否则取maxval(最大值)。它与cv2.THRESH_BINARY是互为反转的方法;
  • cV2.THRESH_TRUNC:大于阈值部分设为阈值,否则不变。即截断阈值;
  • cv2.THRESH_TOZERO:大于阈值部分不改变,否则设为0;
  • cv2.THRESH_TOZERO_INV: 大于阈值部分为0,否则不变。它与THRESH_TOZERO互为反转。

图像阈值分割代码示例:

ret, img2=cv2.threshold(img1,150,250,cv2.THRESH_BINARY)
#对图像进行阈值化处理,像素值超过150的自动设置为250

  • 图形平缓的典型方法

  1. 均值滤波
    均值滤波的目标是降低图像的变化率,将每个像素替换为该像素周围像素的均值,这样就可以平滑并替代那些强度变化明显的区域。
dst = cv2.blur(img, ksize)

dst:处理后返回的图像;
img:要进行处理的图像矩阵;
ksize:均值滤波核的尺寸,一般长设置为(5,5)或(3,3);

均值滤波代码示例:

img = cv2.blur(img,(5,5))

  1. 方框滤波
    方框滤波和均值滤波核基本一致,区别是需不需要均一化处理。
result = cv2.boxFilter(src, depth, ksize, normalize)

result:处理后返回的图像;
depth:表示目标图像深度,是int类型,通常用-1表示与原始图像一致;
ksize:均值滤波核的尺寸,一般长设置为(5,5)或(3,3);
normalize:该属性表示是否对目标图像进行归一化处理。该属性有两个值,True(进行归一化处理,等价于cv2.blur)和False(实际上为求周围各像素的和。但是这个结果很容易大于255,发生溢出,当溢出时对应像素值置为255);

方框滤波代码示例:

img = cv2.boxFilter(img, -1, (5,5), False)

  1. 高斯滤波
    需要对一个像素周围的像素给予更多的重视,因此可以通过高斯滤波分配权重来实现。
cv2.GuassianBlur(img, ksize, sigmaX, sigmaY)

img:要进行处理的图像矩阵;
ksize:均值滤波核的尺寸,一般长设置为(5,5)或(3,3);
sigmaX:X方向的标准偏差;
sigmaY:Y方向的标准偏差;
(ps:如果仅指定了sigmaX,则sigmaY与sigmaX相同。如果两者都为0,则函数根据ksize来自动计算它们的值。)

高斯滤波代码示例:

cv2.GaussianBlur(img, (5,5), 0, 0)

  1. 中值滤波
    以上三种方式均为线性过滤器,而中值滤波为非线性过滤器。
img = cv2.medianBlur(src, ksize)

img:函数返回的处理结果图像;
src:要处理的图像;
ksize:孔径的线性尺寸,若ksize为5,中值滤波器就会使用5×5的范围来计算,即把像素的中心值及其5×5邻域组成了一个数值集,对其进行处理计算,当前像素被其中值替换掉;
(ps:ksize必须是大于1的奇数,比如:3,5,7,9…)

中值滤波代码示例:

img1 = cv2.medianBlur(img, 5)

标签:26,img,阈值,python,cv2,08,滤波,ksize,图像
来源: https://blog.csdn.net/studyplayhappy/article/details/119935024

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有