使用scikit-image / opencv获取蓝色轮廓

时间:2014-02-07 02:38:13

标签: opencv scikit-image

我正在尝试使用scikit-image获得蓝色轮廓。我确信opencv中还有scikit-image中的函数。

我知道find_contours方法效果很好,但它可以获得轮廓的所有颜色。我只想知道蓝色轮廓。

http://scikit-image.org/docs/dev/api/skimage.measure.find_contours.html

有关如何做到这一点的想法?我的猜测是以某种方式预处理图像以除去蓝色以外的所有颜色。

1 个答案:

答案 0 :(得分:3)

你建议首先压制所有其他颜色是一个很好的建议。这是执行此操作的一些代码:

from skimage import io, color, exposure, img_as_float
import matplotlib.pyplot as plt

# http://www.publicdomainpictures.net/view-image.php?image=26890&picture=color-wheel
image = img_as_float(io.imread('color-wheel.jpg'))

blue_lab = color.rgb2lab([[[0, 0, 1.]]])
light_blue_lab = color.rgb2lab([[[0, 1, 1.]]])
red_lab = color.rgb2lab([[[1, 0, 0.]]])
image_lab = color.rgb2lab(image)

distance_blue = color.deltaE_cmc(blue_lab, image_lab, kL=0.5, kC=0.5)
distance_light_blue = color.deltaE_cmc(light_blue_lab, image_lab, kL=0.5, kC=0.5)
distance_red = color.deltaE_cmc(red_lab, image_lab, kL=0.5, kC=0.5)
distance = distance_blue + distance_light_blue - distance_red
distance = exposure.rescale_intensity(distance)

image_blue = image.copy()
image_blue[distance > 0.3] = 0

f, (ax0, ax1, ax2) = plt.subplots(1, 3, figsize=(20, 10))
ax0.imshow(image)
ax1.imshow(distance, cmap='gray')
ax2.imshow(image_blue)
plt.show()

Color selection