import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread('nemo.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
hsv_img = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
light_orange = (1,190,200)
dark_orange = (18,255,255)
light_white = (0,0,200)
dark_white = (145,60,255)
orange_mask = cv2.inRange(hsv_img,light_orange,dark_orange)
white_mask = cv2.inRange(hsv_img,light_white,dark_white)
mask = orange_mask+white_mask
result = cv2.bitwise_and(img, img,mask=mask)
plt.subplot(121)
plt.imshow(mask,cmap="gray")
plt.subplot(122)
plt.imshow(result)
plt.show()
在本教程中,您已经了解了几种不同的色彩空间,如何在RGB和HSV色彩空间中分布图像,以及如何使用OpenCV在色彩空间之间进行转换并划分出范围。
总体而言,您已经了解了如何使用OpenCV中的色彩空间在图像中执行对象分割,并希望看到它也可以执行其他任务。这种分割技术简单,快速且可靠。
在OpenCV + Python中使用色彩空间进行图像分割什么是色彩空间?在最常见的颜色空间RGB(红色绿色蓝色)中,颜色以红色,绿色和蓝色分量表示。用更专业的术语来说,RGB将颜色描述为三个组成部分的元组。每个分量可以取0到255之间的值,其中元组(0, 0, 0)代表黑色,(255, 255, 255)代表白色。RGB被认为是三原色“加法”颜色空间,可以想象颜色是由大量红色,蓝色和绿色的...
全局阈值分割是一种简单而有效的图像分割方法,通过将图像中的像素值与一个预先设定的阈值进行比较,将像素分为两个类别:背景和前景。在 OpenCV 中,可以使用 cv2.threshold() 函数来进行全局阈值分割。
下面是一个基于 OpenCV + Python 的全局阈值分割的实现示例:
```python
import cv2
# 读取图像
img = cv2.imread('test.jpg', 0)
# 进行全局阈值分割
ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# 显示原始图像和分割结果
cv2.imshow('original', img)
cv2.imshow('threshold', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这个例子中,我们使用 cv2.imread() 函数读取名为 test.jpg 的图像,然后使用 cv2.threshold() 函数进行全局阈值分割。该函数的第一个参数是输入图像,第二个参数是阈值,第三个参数是将像素分为两个类别的最大像素值,第四个参数是阈值类型。在这个例子中,我们使用 THRESH_BINARY 类型,表示将像素值大于阈值的像素设置为最大值,将像素值小于等于阈值的像素设置为 0。最后,使用 cv2.imshow() 函数显示原始图像和分割结果,并使用 cv2.waitKey() 函数等待用户按下任意键关闭窗口。
需要注意的是,阈值的选择需要根据具体的应用场景和图像特点进行调整,通常可以通过试验法来选择最佳的阈值。