前言
在本节中,我们将学习如何使用 OpenCV 在 HSV 色彩空间中使用特定颜色检测感兴趣对象。我们需要通过指定颜色值范围识别和提取感兴趣的对象,使用具有病毒的血细胞图像,我们的目标在于识别绿色的病毒对象。
检测病毒对象
(1) 首先,导入所需 Python 库,使用 OpenCV 的 imread() 函数读取图像,然后将 BGR 图像转换为 RGB 色彩空间图像,以便我们可以正确地使用 imshow() 函数显示该图像。接下来,我们使用 cv2.cvtcolor() 函数将 RGB 色彩空间图像转换到 HSV 色彩空间中:
import cv2
from matplotlib import pyplot as plt
import numpy as np
img = cv2.cvtColor(cv2.imread('virus_blood.jpg'), cv2.COLOR_BGR2RGB)
img_hsv=cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
(2) 通过使用 cv2.inRange() 函数选择图像中病毒对象可能具有的HSV颜色范围,为病毒对象创建遮罩。要在 HSV 色彩空间中找到特定的颜色,只需查找相应的 H 和 S 范围,然后将 V 的范围设置为我们感兴趣的颜色(例如,病毒的绿色),然后就可以执行搜索任务,根据本节应用,我们可以将 HSV 范围设置为从 (30, 23, 10) 到 (80, 255, 255) 。
OpenCV 的 inRange() 函数可以用于颜色检测,它接受 HSV 输入图像以及颜色范围作为参数,并会返回一个二值蒙版图像,其中白色像素代表处于指定 HSV 范围内的像素,而黑色像素表示指定的范围之外的像素:
low_green = np.array([30, 25, 10])
high_green = np.array([80, 255, 255])
green_mask = cv2.inRange(img_hsv, low_green, high_green)
green = cv2.bitwise_and(img, img, mask=green_mask)
(3) 通过创建输出图像,使用二值掩码对绿色病毒对象进行切片,并将其设置为零:
output_img = img.copy()
output_img[np.where(green_mask==0)] = (0,0,0)
(4) 最后,绘制输入图像、生成的掩码图像以及检测到的病毒对象的输出图像:
plt.figure(figsize=(20, 8))
plt.gray()
plt.subplots_adjust(0,0,1,0.975,0.05,0.05)
plt.subplot(131), plt.imshow(img), plt.axis('off'), plt.title('original', size=20)
plt.subplot(132), plt.imshow(green_mask), plt.axis('off'), plt.title('mask', size=20)
plt.subplot(133), plt.imshow(output_img), plt.axis('off'), plt.title('virus cells', size=20)
plt.suptitle('Filtering out the virus cells', size=30)
plt.show()
从以上图像可以看出,由于一些病毒对象被血细胞遮挡,因此在输出图像中仅部分可见。
相关链接
Python图像处理【1】图像与视频处理基础 Python图像处理【2】探索Python图像处理库 Python图像处理【3】Python图像处理库应用
|