我试图执行此代码here如本答案中所述。我似乎无法摆脱零价值的分裂。rgb_to_hsv和向后使用蟒蛇和numpy
我试图从caman Js中复制这段代码,将其从rgb转换为hsv,但我得到了同样的结果。
RuntimeWarning invalide value encountered in divide
caman代码
Convert.rgbToHSV = function(r, g, b) {
var d, h, max, min, s, v;
r /= 255;
g /= 255;
b /= 255;
max = Math.max(r, g, b);
min = Math.min(r, g, b);
v = max;
d = max - min;
s = max === 0 ? 0 : d/max;
if (max === min) {
h = 0;
} else {
h = (function() {
switch (max) {
case r:
return (g - b)/d + (g < b ? 6 : 0);
case g:
return (b - r)/d + 2;
case b:
return (r - g)/d + 4;
}
})();
h /= 6;
}
return {
h: h,
s: s,
v: v
};
};
我的基础上,答案从这里
import Image
import numpy as np
def rgb_to_hsv(rgb):
hsv = np.empty_like(rgb)
hsv[...,3] = rgb[...,3]
r,g,b = rgb[...,0], rgb[...,1], rgb[...,2]
maxc = np.amax(rgb[...,:3], axis=-1)
print maxc
minc = np.amin(rgb[...,:3], axis=-1)
print minc
hsv[...,2] = maxc
dif = (maxc - minc)
hsv[...,1] = np.where(maxc==0, 0, dif/maxc)
#rc = (maxc-r)/ (maxc-minc)
#gc = (maxc-g)/(maxc-minc)
#bc = (maxc-b)/(maxc-minc)
hsv[...,0] = np.select([dif==0, r==maxc, g==maxc, b==maxc], [np.zeros(maxc.shape), (g-b)/dif + np.where(g<b, 6, 0), (b-r)/dif + 2, (r - g)/dif + 4])
hsv[...,0] = (hsv[...,0]/6.0) % 1.0
idx = (minc == maxc)
hsv[...,0][idx] = 0.0
hsv[...,1][idx] = 0.0
return hsv
的例外,我得到它的代码,这两个无论我划分与MAXC或DIF(因为他们具有零值)。
我在@unutbu,runtimewarning中遇到了原始代码中的相同问题。 Caman似乎在每个像素单独执行此操作,即针对每个r,g,b组合。
我还得到了形状错配的ValueError:执行select函数时,无法将对象广播为单个形状。但我双重检查的选择的所有形状和他们都(256,256)
编辑: 我纠正使用this wikipedia article功能和更新的代码...现在我只得到runimeWarning
你可以请链接一些输入数据,以便我们可以重现该问题。 – Daniel
http://iconbug.com/data/45/256/ee71e5424fa6f61009240ab62c956d5e.png我使用这个图像..它给我所有这些错误 https://www.google.com/mapmaker/mapfiles/small_blue_ball.png这个产生新的图像,但我仍然得到RuntimeWarning错误,但没有形状不匹配 – Apostolos
仍然没有运气?我无法找出问题...我认为我的代码看起来正确 – Apostolos