在Python中按颜色搜索图像
发布时间:2020-12-20 13:44:54 所属栏目:Python 来源:网络整理
导读:我们有一个包含超过250,000张图像的数据库,我们希望按颜色搜索这些图像 – 类似于Google的颜色搜索方式.因此,我们定义了12种不同的颜色:从黑色到红色,绿色和蓝色到白??色.如果用户选择例如红色,我们想要返回包含明显“红色部分”的所有图像. “红色艺术”是
我们有一个包含超过250,000张图像的数据库,我们希望按颜色搜索这些图像 – 类似于Google的颜色搜索方式.因此,我们定义了12种不同的颜色:从黑色到红色,绿色和蓝色到白??色.如果用户选择例如红色,我们想要返回包含明显“红色部分”的所有图像. “红色艺术”是指任何颜色范围,从深红色到略微紫色.
计划是拍摄一张图像,将其缩小到64×64像素并使用所有像素的HSL值.这就是我们计算不同颜色范围的方法: from PIL import Image import colorsys image = Image.open('test.jpg').convert('RGBA').resize((64,64),Image.ANTIALIAS) red,orange,yellow,green,turquoise,blue,lilac,pink,white,gray,black,brown = 0,0 for px in image.getdata(): h,s,l = colorsys.rgb_to_hsv(px[0]/255.,px[1]/255.,px[2]/255.) h = h * 360 s = s * 100 l = l * 100 if l > 95: white += 1 elif l < 8: black += 1 elif s < 8: gray += 1 elif h < 12 or h > 349: red += 1 elif h > 11 and h < 35: if s > 70: orange += 1 else: brown += 1 elif h > 34 and h < 65: yellow += 1 elif h > 64 and h < 150: green += 1 elif h > 149 and h < 200: turquoise += 1 elif h > 195 and h < 250: blue += 1 elif h > 245 and h < 275: lilac += 1 elif h > 274 and h < 350: pink += 1 print 'White:',white print 'Black:',black print 'Gray:',gray print 'Red:',red print 'Orange:',orange print 'Brown:',brown print 'Yellow:',yellow print 'Green:',green print 'Turquoise:',turquoise print 'Blue:',blue print 'Lilac:',lilac print 'Pink:',pink 它与一些图像的效果相当不错,并且与其他图像相差无几.问题是:感知的颜色不仅取决于色调值,还取决于亮度和饱和度.例如.对于较低的饱和度/亮度值,我们对黄色的定义完全失败 – >它只是变成绿褐色,与黄色无关.但这只是一个特例;棕色使我们成为橙色的一种低调的颜色……从整体看来,这个系统似乎变得非常复杂. 我想我在这里做错了.尝试使用RGB值也失败了.试图用直方图找出更好的方法,但由于愚蠢或某事而失败了…… 橙色,红色,蓝色等也可以是布尔…我们可以在我们的数据库中使用任何东西来检索搜索结果……我正在尝试使用本机Python库Pillow并且不想使用scipy或numpy或者任何其他第三方应用程序,除非确实有必要.我看了很多类似的SO问题,但没有一个有帮助.我发现这个问题的大多数答案都没有有用的示例代码. 救命! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |