目录:

  1. cv2.threshold
  2. cv2.distanceTransform
  3. cv2.cvtColor

1. cv2.threshold

opencv: 阈值处理(cv2.threshold) 探究(图示+源码) 

官方说明文档

OpenCV 中cv2.threshold详解,(大白话版)

opencv二值化的cv2.threshold函数

  API定义:OpenCV 3.2.0 中,阈值处理的 api 定义如下:

cv2.threshold (src, thresh, maxval, type)

  即:

cv2.threshold (源图片, 阈值, 填充色, 阈值类型)

  参数:

  • src:源图片,必须是单通道
  • thresh:阈值,取值范围0~255
  • maxval:填充色,取值范围0~255
  • type:阈值类型,具体见下表

  阈值类型表

阈值 types 小于阈值的像素点 大于阈值的像素点
0 cv2.THRESH_BINARY 置0 置填充色
1 cv2.THRESH_BINARY_INV 置填充色 置0
2 cv2.THRESH_TRUNC 保持原色 置灰色,threshold
3 cv2.THRESH_TOZERO 置0 保持原色
4 cv2.THRESH_TOZERO_INV 保持原色 置0

  举个例子:

  下面例子实现的功能就是提取出里面颜色最白的部分

# Finding sure foreground area
# Opencv中distanceTransform方法用于计算图像中每一个非零点距离离自己最近的零点的距离,
# distanceTransform的第二个Mat矩阵参数dst保存了每一个点与最近的零点的距离信息,图像上
# 越亮的点,代表了离零点的距离越远。
dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,5)

# 本身不能完全显示,需要拉伸后显示
display(Image.fromarray((dist_transform*255/np.max(dist_transform)).astype('uint8')))

# 70%-100% 的大值变为 白色,255
# 0% - 70% 的小值变为 黑色,0
# sure foreground
ret, sure_fg = cv2.threshold(dist_transform, 0.7*dist_transform.max(), 255, 0)

display(Image.fromarray(sure_fg.astype('uint8')))

【545】OpenCV 相关函数说明_阈值处理 【545】OpenCV 相关函数说明_取值范围_02

  

2. cv2.distanceTransform

官方说明文档

  Opencv中distanceTransform方法用于计算图像中每一个非零点距离离自己最近的零点的距离,distanceTransform的第二个Mat矩阵参数dst保存了每一个点与最近的零点的距离信息,图像上越亮的点,代表了离零点的距离越远。

  该函数的参数设置挺迷的,就按照下面的例子就行,cv2.DIST_L2 为欧氏距离,实现的效果就是距离 0 点越远,值越大,从而将主体部分分离出来,如下图所示:

# Finding sure foreground area
# Opencv中distanceTransform方法用于计算图像中每一个非零点距离离自己最近的零点的距离,
# distanceTransform的第二个Mat矩阵参数dst保存了每一个点与最近的零点的距离信息,图像上
# 越亮的点,代表了离零点的距离越远。
dist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)

# 本身不能完全显示,需要拉伸后显示
display(Image.fromarray((dist_transform*255/np.max(dist_transform)).astype('uint8')))

【545】OpenCV 相关函数说明_取值范围_03 【545】OpenCV 相关函数说明_阈值处理

 

3. cv2.cvtColor

Python OpenCV cv2.cvtColor()用法及代码示例

  cv2.cvtColor()方法用于将图像从一种颜色空间转换为另一种颜色空间。最常用的就是彩色图片转为灰度图片。

  用法:

cv2.cvtColor(src, code[, dst[, dstCn]])

  参数:

  • src: 它是要更改其色彩空间的图像。
  • code: 它是色彩空间转换代码。
    • cv2.COLOR_BGR2RGB:cv2读取的 BGR 格式转为 RGB 格式
    • cv2.COLOR_RGB2GRAY:RGB 转 Gray
    • cv2.COLOR_GRAY2RGB:Gray 转 RGB
  • dst: 它是与src图像大小和深度相同的输出图像。它是一个可选参数。
  • dstCn: 它是目标图像中的频道数。如果参数为0,则通道数自动从src和代码得出。它是一个可选参数。

  返回值:它返回一个图像。

img = cv2.imread('seg_smooth.png')

# 转为灰度的图,也是二值图,针对cv2读取的图像是 BGR 三通道
thresh = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)