有人可以帮我这个功能吗?此功能在相机应用程序中,该应用程序使用过滤器算法来检测颜色变体等的差异等.语法对我来说非常困难.我不知道该如何处理参数,最小和最大变量语法,什么是delta等中的指针?有人可以为我翻译吗?非常感激. 我还应该和uicolor做某事吗?有人在下面提到.我不知道如何转换. // r,g,b values are from 0 to 1 // h = [0,360], s = [0,1], v = [0,1] // if s == 0, then h = -1 (undefined) void RGBtoHSV( float r, float g, float b, float *h, float *s, float *v ) { float min, max, delta; min = MIN( r, MIN(g, b )); max = MAX( r, MAX(g, b )); *v = max; delta = max - min; if( max
以下是关于 hsv 的编程技术问答
我正在开发一个应用程序,在该应用程序中,儿童需要在相机屏幕上使用某个目标点找到某些颜色 - 类似的增强现实. 我已经完成了整个过程,但是有RGB颜色. 对于每种颜色,红色,绿色,蓝色,黄色,紫色等.我一直在测试和定义RGB值的范围,以确定何时完全是哪种颜色.很多工作. 但是,我了解到使用HSV它的效果更好.但是我不想再次完成每种颜色设置范围的整个过程.但是我根本找不到在线任何地方,我已经谷歌搜索了两个小时! 所以我要搜索的内容非常简单: 对于大约8种标准颜色:红色,绿色,蓝色,黄色,紫色等 例如: 红色 - 色调在0到20之间,饱和度在0.8到1.0之间,值在0.8到1.0之间. (不确定这是正确的,只是一个例子) 我的意思是,有人一定已经在某个时候做了!? 解决方案 第一个数学定义的颜色空间之一是我发现的最接近的图表是在
目的是将纯红色图像转换为色轮的任何色调. 首先将单色图像转换为RGB红色图像,例如: 然后转换为HSV 通过将角度值添加到 匹配轮子 然后将HSV图像返回转换为RGB颜色空间. 问题是只能获得绿色或蓝色的图像(n 在某些ipython单元中执行的代码依赖于scikit-image 0.10DEV: from skimage import io from skimage import color from scipy import ndimage as nd import numpy as np from matplotlib import pyplot as plt import os cy55 = io.imread('/home/jeanpat/MFISH/PSI/P07/01/Cy5/P070109C.tif') zero = np.zeros(cy55.shape,dtype=np.uint8) rgb0 = np.dstack([cy55, ze
我正在尝试使用def rgb2hsv_opencv(img_rgb): img_hsv = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2HSV) return img_hsv def rgb2hsv_np(img_rgb): assert img_rgb.dtype == np.float32 height, width, c = img_rgb.shape r, g, b = img_rgb[:,:,0], img_rgb[:,:,1], img_rgb[:,:,2] t = np.min(img_rgb, axis=-1) v = np.max(img_rgb, axis=-1) s = (v - t) / (v + 1e-6) s[v==0] = 0 # v==r hr = 60 * (g - b) / (v - t + 1e-6) # v==g hg = 120 + 60 * (b - r) / (v - t + 1e-6) # v==b hb = 2
我只关心12种颜色: red: RGB: 255, 0, 0 pink: RGB: 255, 192, 203 violet: RGB: 36, 10, 64 blue: RGB: 0, 0, 255 green: RGB: 0, 255, 0 yellow: RGB: 255, 255, 0 orange: RGB: 255, 104, 31 white: RGB: 255, 255, 255 black: RGB: 0, 0, 0 gray: RGB: 128, 128, 128 tea: RGB: 193, 186, 176 cream: RGB: 255, 253, 208 当我阅读位图的像素时,我可以获得色调值: int picw = mBitmap.getWidth(); int pich = mBitmap.getHeight(); int[] pix = new int[picw * pich]; float[] HSV = new
我正在使用SFML,并且它具有在RGB中取值的颜色函数.示例..(255,0,0).我希望能够通过循环循环这些数字,以便以色调显示的颜色周期... 因此,如果我使用(76,204,63),则该功能将调整这3个数字.因此,我需要该功能来摄入RGB转换为HSV,然后返回RGB. 有什么想法我该怎么做? 我希望使用的SFML代码是... _sprite.setColor(76,204,63);这将把精灵设置为颜色...我试图弄清楚一旦使用这些数字完成的方式以循环颜色. 解决方案 有了一点谷歌搜索,我找到了 this 回答并将代码转换为C ++,并用SFML将SFML转换为SFML . 我的铸造非常糟糕,所以请随时使其变得更好.我想甚至应该可以替换3x3数组. sf::Uint8 clampAndConvert(float v) { if(v 255) return
我遇到这个堆栈溢出问题及其位置(以及骰子位置等). 我很感兴趣,因此使用他们提供的图片,我使用OpenCV和调整后的HSV值等,直到找到每种颜色的所有播放器零件 - 以及它们所在的位置(三角形).我有这个工作.但是,显然,这仅适用于此特定板上的特定颜色. 如果我们知道我们正在寻找大量的圆形播放两种不同的颜色和它们坐在的三角形(即3个侧面和圆形的多边形),您会建议什么方法,以便用户不必必须带有HSV值的小提琴来捡起零件(让我们开始说"一些"的准确性,而不是100%完美). 我从用户体验的角度思考,您认为我无法要求普通的Jo用h和s和v进行小提琴,直到一切设置为了自动检测到它似乎在某种程度上是必要的... 我认为,要求用户对已知的设置进行校准,例如板或其他东西的开始设置,然后询问它们是否正确 - 也许单击已错过的区域或其他东西. 我正在使用GOCV进行实施,但通常它是OpenCV的端口.但是,要测试这一点,我相信我无法在点击下直接访问颜色,因此我考虑使用SelectROI
我正在尝试将颜色图像从RGB转换为HSV(进行更改),然后返回RGB.作为一个测试,我制作了此代码只是为了测试如何从RGB到HSV回到RGB,但是当我查看图像时,它只是显示为黑色.我想念什么? *ps我使用的是八度的3.8.1 Here are the octave 3.8.1 packages I have loaded: >>> pkg list Package Name | Version | Installation directory --------------+---------+----------------------- control *| 2.6.2 | /usr/share/octave/packages/control-2.6.2 general *| 1.3.4 | /usr/share/octave/packages/general-1.3.4 geometry *| 1.7.0 | /usr/share/
我正在尝试在iPhone中实现一些图像过滤器,例如宝丽来.我搜索了如何过滤现有的uiimage将其转换为double minRGB(double r, double g, double b){ if (r g){ if (r > b){ return r; }else { return b; } }else { if (g > b){ return g; }else { return b; } } } void rgbToHsv(double redIn,double greenIn,double blueIn,double *hue,double *saturation,double
我编写了一个函数,该函数从RGB> HSV转换了图像.但是,当我保存新图像时,我唯一得到的就是黑色图像.我应该解决什么以解决? 任何帮助都将受到赞赏! 我的代码: def HSVColor(img): if isinstance(img,Image): r,g,b = img.split() Hdat = [] Sdat = [] Vdat = [] for rd,gn,bl in zip(r.getdata(),g.getdata(),b.getdata()) : h,s,v = colorsys.rgb_to_hsv(rd/255.,gn/255.,bl/255.) Hdat.append(int(h*255.)) Sdat.append(int(l*255.)) Vdat.appe
我的原始问题 我阅读了将RGB像素转换为Greyscale RGB的阅读,应该使用 r_new = g_new = b_new = r_old * 0.3 + g_old * 0.59 + b_old * 0.11 我还读到并理解,g的重量较高,因为人眼对绿色更敏感.实现这一点,我看到结果与从设置图像到诸如gimp. 在阅读本文之前,我想象要将像素转换为灰度,将其转换为HSL或HSV,然后将饱和度设置为零(因此,删除所有颜色).但是,当我这样做时,我的图像输出也完全不同,即使它也缺乏颜色. s = 0与我阅读的"正确"方式完全不同,为什么它'不正确'? 基于答案和其他研究的正在进行的发现 看来,要使用的亮度系数是某些争论的主题.各种组合和绿色算法的结果不同.以下是电视标准等区域中使用的一些预设: ITU-R BT.601(NTSC?)定义的系数是0.299r + 0.587g + 0.114b ITU-R BT.709(较新)定义的系数是0.2
i必须检测包含其他血细胞的图像中的白细胞细胞,但是可以通过细胞的颜色来区分差异,白细胞具有更致密的紫色,可以在下面的图像中看到. . 我要使用RGB/HSV的哪种颜色?为什么?! 示例图像: 解决方案 通常,在做出这样的决策时,我只是快速绘制不同的频道和颜色空间,然后查看我的发现.从高质量的图像开始比从低质量开始并尝试使用大量处理 来修复它总是更好的 在这种特定情况下,我将使用HSV.但是与大多数颜色分割不同,我实际上将使用饱和通道来细分图像.细胞几乎是相同的色调,因此使用色调通道将非常困难. 色调(在全饱和和充分的亮度下)很难区分细胞 饱和巨大的对比 绿色频道,实际上也显示了很多对比度(令我惊讶) 红色和蓝色通道很难实际区分细胞. 现在,我们有两个候选人表示的饱和度或绿色频道,我们要求哪个更易于使用?由于任何HSV的工作都涉及我们转换RGB图像,因此我们可以将其予以解散,因此明确的选择是简单地将RGB图像的绿色频道用于分割.
我认为我应该发布这个问题,即使我已经找到了解决方案,因为当我搜索它时,Java实现不容易可用. 使用HSV代替RGB可以产生具有相同饱和度和亮度的颜色(我想要的). Google App Engine不允许使用Java.awt.Color,因此在HSV和RGB之间进行以下操作不是一个选择: Color c = Color.getHSBColor(hue, saturation, value); String rgb = Integer.toHexString(c.getRGB()); 编辑:我如尼克·约翰逊(Nick Johnson)的评论中所述移动了答案. ex animo, - 亚历山大. 解决方案 我对颜色数学一无所知,但是我可以为代码提供此替代结构,这使我的美学意义挠痒痒,因为这对我来说很明显价值,t和p. (我也对长时间的if-else链有不合理的恐惧.) public static String hsvToRgb(float hue,
我在Internet上找到了将RGB值转换为HSV值的方法. 不幸的是,当值为r = g = b时,由于0/0操作,我会得到一个NAN. 您知道是否有一种在Java中进行此转换的方法,还是当我获得0/0司以获得HSV的正确值时该怎么办? 这是我的方法,从互联网上的某些代码进行了改编: public static double[] RGBtoHSV(double r, double g, double b){ double h, s, v; double min, max, delta; min = Math.min(Math.min(r, g), b); max = Math.max(Math.max(r, g), b); // V v = max; delta = max - min; // S if( max != 0 ) s = delta / max;
我需要从RGB的色彩空间传递给HSV. a: precision mediump float; vec3 rgb2hsv(float r, float g, float b) { float h = 0.0; float s = 0.0; float v = 0.0; float min = min( min(r, g), b ); float max = max( max(r, g), b ); v = max; // v float delta = max - min; if( max != 0.0 ) s = delta / max; // s else { // r = g = b = 0 // s = 0, v is undefined s = 0.0;
我可以将 rgb 值转换为 hsv ,并使用以下代码... $r = $r/255; $g = $g/255; $b = $b/255; $h = 0; $s = 0; $v = 0; $min = min(min($r, $g),$b); $max = max(max($r, $g),$b); $r = $max-$min; $v = $max; if($r == 0){ $h = 0; $s = 0; } else { $s = $r / $max; $hr = ((($max - $r) / 6) + ($r / 2)) / $r; $hg = ((($max - $g) / 6) + ($r / 2)) / $r; $hb = ((($max - $b) / 6) + ($r / 2)) / $r; if ($r == $max) $h = $hb - $hg; else if($g == $max)
是否有一种方法可以使用Python中的Pygame模块将HSV颜色参数转换为RGB类型的颜色参数?我尝试了以下代码,但它返回可笑的值. import colorsys test_color = colorsys.hsv_to_rgb(359, 100, 100) print(test_color) 此代码返回以下废话 (100, -9900.0, -9900.0) 这显然不是RGB.我在做什么错? 解决方案 该功能期望s(饱和)和v(值),而不是百分比.除以100. >>> import colorsys # Using percent, incorrect >>> test_color = colorsys.hsv_to_rgb(359,100,100) >>> test_color (100, -9900.0, -9900.0) # Using decimal, correct >>> test_color = colorsys.hsv_to_r
如何使用c#? 将RGB颜色转换为HSV 我在不使用任何外部库的情况下搜索了快速方法. 解决方案 您是否考虑过简单地使用System.Drawing名称空间?例如: System.Drawing.Color color = System.Drawing.Color.FromArgb(red, green, blue); float hue = color.GetHue(); float saturation = color.GetSaturation(); float lightness = color.GetBrightness(); 请注意,这并不完全是您要要求的(请参阅 >并且颜色类没有从hsl/hsv进行转换,但是后者是合理的易于添加. 其他解决方案 请注意,Color.GetSaturation()和Color.GetBrightness()返回HSL值,而不是HSV. 以下代码演示了差异. Color original = Color.Fr