此代码将颜色空间更改为LAB,并使用阈值来查找图像的皮肤区域。但速度慢得可笑。我不知道怎么让它快点?在
from colormath.color_objects import *
def skinDetection(img, treshold=80, color=[255,20,147]):
print img.shape
res=img.copy()
for x in range(img.shape[0]):
for y in range(img.shape[1]):
RGBimg=RGBColor(img[x,y,0],img[x,y,1],img[x,y,2])
LABimg=RGBimg.convert_to('lab', debug=False)
if (LABimg.lab_l > treshold):
res[x,y,:]=color
else:
res[x,y,:]=img[x,y,:]
return res
我建议您按照一个简单的过程来优化代码:
1添加一些性能指标。您必须了解代码的哪个部分占用了大部分时间。
2用性能更好的功能更新这些功能
三。衡量绩效改进
在Python中,嵌套循环总是很慢。迭代每个像素,因此需要很多时间。在
向量化操作总是更快,也就是说,将数组作为一个整体执行操作,并让底层的C例程执行循环。在
我对
colormath
不太了解,因此我不能为这个库提供相应的代码(也不知道它是否存在),但是对于scikit-image
,我可以:我将整个图像转换为实验室空间,然后确定一个遮罩(其中L高于阈值),然后将这些像素设置为新的颜色。此方法产生的结果与您的方法稍有不同(可能是因为不同的转换实现),但它可能满足您的需要。在
下面是一个完整的脚本,包括您的方法(
^{pr2}$mask1
)和性能度量。在我在代码中嵌入了一个图像,代码的某些部分只是用来解码的。在
这个脚本的输出是
所以我的方法比你的快80倍。对于更大的图像(这个只有24 x 24像素),差别更大,大约是120倍。在
看看矢量化的力量吧!在
相关问题 更多 >
编程相关推荐