Python中的图像点检测

时间:2012-03-10 22:18:47

标签: python image-processing computer-vision

我有数百万张包含每日照片的图片。我试图找到一种方法来挑选出某些颜色存在的东西,比如红色和橙色,忽略形状或物体。尺寸可能很重要 - 例如,至少50x50像素。

是否有一个高效轻量级的库来实现这一目标?我知道有OpenCV,它看起来非常强大,但它对于这个任务会不会太臃肿?这是一项相对简单的任务,对吗?

由于

2 个答案:

答案 0 :(得分:2)

当然OpenCV可以做到这一点,但你也可以使用Python Imaging Library PIL并创建一个函数来迭代图像裁剪图像集的最小尺寸的小块,并平均测试这些块颜色和符合匹配标准的容差。 (未经测试的伪代码)的一些东西:

import Image

im = Image.open("test_picture.png")
for y in xrange(image_height - block_height):
    for x in xrange(image_width - block_width):
        block = im.crop(x, y, x + block_width, y + block_height)
        if colour_test(block):   # test for match
            return True

使用block.getcolors()很容易获得图像的色频信息,因此您可以轻松编写colour_test()函数。

答案 1 :(得分:1)

我不知道是否有库但您可以使用简单的阈值分割算法对这些区域进行分割。说,你想找到红点。从图像中提取红色通道,选择阈值,并消除低于阈值的像素。结果像素是你的斑点。要找到合适的阈值,您可以构建图像的红色通道直方图并在那里找到谷。山谷中的最低点是您可以使用的阈值。如果有多个山谷,请将直方图平滑,直到有一个山谷和两个山峰。您可以使用高斯函数来平滑直方图。要从剩余像素中查找斑点,您可以使用标记算法,然后在图形中找到标记算法生成的连接组件。是的,很简单。 :)