当前位置:   article > 正文

OpenCv更改颜色空间以及图像阈值_cv.color

cv.color
本文主要讲解以下几个方面:
  • 如何将图片从一个颜色空间转换到另一个,例如 BGR 到 Gray,BGR 到 HSV 等。
  • 简单阈值法
  • 另外,我们会创建一个从图片中提取彩色对象的应用。
1.改变颜色空间

cv.cvtColor(img, flag)

  • 参数flag表示颜色空间转换的方法,常用的方法为BGR -> GRAY以及BGR -> HSV这两种图像空间转换的方法其flag对应的指令分别为cv.COLOR_BGR2GRAYcv.COLOR_BGR2HSV

如果想查看其它flag属性的话可以在python终端输入如下代码执行,如图所示(部分)

import cv2
flags = [i for i in dir(cv2) if i.startsWith('COLOR_')]
print(flags)
  • 1
  • 2
  • 3

在这里插入图片描述

Attention: 对于 HSV, 色调(Hue)范围为 [0,179], 饱和度(Saturation)范围为 [0,255] ,明亮度(Value)为 [0,255]. 不同的软件使用不同的比例. 所以如果你想用 OpenCV 的值与别的软件的值作对比,你需要归一化这些范围

2. 图像的阈值操作

cv.threshold(src, thresh, maxval, type)函数

  • src 阈值处理的图像文件 它应该是灰度图像
  • thresh 界限值, 用于对像素值进行分类
  • maxval 它表示像素值大于(有时小于)阈值时要给定的值
  • type不同阈值类型

type主要使用以下几种:

cv.THRESH_BINARY
cv.THRESH_BINARY_INV
cv.THRESH_TRUNC
cv.THRESH_TOZERO
cv.THRESH_TOZERO_INV

其他的可以前往官方文档中查看传送门

  1. 简单阈值法
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('gradient.png',0)
ret,thresh1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
ret,thresh2 = cv.threshold(img,127,255,cv.THRESH_BINARY_INV)
ret,thresh3 = cv.threshold(img,127,255,cv.THRESH_TRUNC)
ret,thresh4 = cv.threshold(img,127,255,cv.THRESH_TOZERO)
ret,thresh5 = cv.threshold(img,127,255,cv.THRESH_TOZERO_INV)
titles = ['Original Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in xrange(6):
    plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述
其他阈值法请查看文档
https://opencv.apachecn.org/#/docs/4.0.0/4.3-tutorial_py_thresholding

3. 提取图片中的色彩

现在我们知道了如何将 BGR 图片转化为 HSV 图片,我们可以使用它去提取彩色对象。HSV 比 BGR 在颜色空间上更容易表示颜色。在我们的应用中,我们会尝试提取一个蓝色的彩色对象,方法为:

track = cv.imread('images/track.jpg')
# 将颜色空间由BGR转化为HSV
hsv = cv.cvtColor(track, cv.COLOR_BGR2HSV)
# 设置提取颜色的范围
lower_blue = np.array([100,50,50])
upper_blue = np.array([140,255,255])
# 将蓝色以外的颜色通过阈值处理
mask = cv.inRange(hsv, lower_blue, upper_blue)
# 将处理后的图像和原图像进行位-与运算
res = cv.bitwise_and(track,track, mask= mask)
ret = np.hstack((track, res))
cv.imshow('result', ret)
cv.waitKey(0)
cv.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

结果如图:在这里插入图片描述
参考:opencv4.0 中文文档以及英文文档
感谢阅读!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/920250
推荐阅读
相关标签
  

闽ICP备14008679号