我想设计一个程序,可以帮助我评估5种预定义的颜色,其中一种颜色更接近可变颜色,以及百分比.问题是我不知道如何逐步手动完成.所以想到一个程序就更难了.
更多细节:颜色来自具有不同颜色的凝胶管的照片.我有5个不同颜色的管子,每个都代表5个级别中的1个.我想拍摄其他样品的照片,并在计算机上通过比较颜色来评估样品属于哪个级别,我想知道这也是近似的百分比.我想要一个类似这样的程序:http://www.colortools.net/color_matcher.html
如果你能告诉我采取什么步骤,即使它们是让我思考和手动做的事情.这将非常有帮助.
我有一个咖啡罐的图像,橙色的盖子位置,我想找到.就这个
.
gcolor2实用程序显示盖子中心的HSV为(22,59,100).问题是如何选择颜色的限制呢?我尝试了min =(18,40,90)和max =(27,255,255),但是出乎意料
这是Python代码:
import cv
in_image = 'kaffee.png'
out_image = 'kaffee_out.png'
out_image_thr = 'kaffee_thr.png'
ORANGE_MIN = cv.Scalar(18, 40, 90)
ORANGE_MAX = cv.Scalar(27, 255, 255)
COLOR_MIN = ORANGE_MIN
COLOR_MAX = ORANGE_MAX
def test1():
frame = cv.LoadImage(in_image)
frameHSV = cv.CreateImage(cv.GetSize(frame), 8, 3)
cv.CvtColor(frame, frameHSV, cv.CV_RGB2HSV)
frame_threshed = cv.CreateImage(cv.GetSize(frameHSV), 8, 1)
cv.InRangeS(frameHSV, COLOR_MIN, COLOR_MAX, frame_threshed)
cv.SaveImage(out_image_thr, frame_threshed)
if __name__ == '__main__':
test1()
Run Code Online (Sandbox Code Playgroud) 我需要准确地将HSB转换为RGB,但我不知道如何解决将小数转换为整数而不进行舍入的问题.这是我在colorpicker库中使用的当前函数:
HSBToRGB = function (hsb) {
var rgb = { };
var h = Math.round(hsb.h);
var s = Math.round(hsb.s * 255 / 100);
var v = Math.round(hsb.b * 255 / 100);
if (s == 0) {
rgb.r = rgb.g = rgb.b = v;
} else {
var t1 = v;
var t2 = (255 - s) * v / 255;
var t3 = (t1 - t2) * (h % 60) / 60;
if (h == 360) h = 0;
if …Run Code Online (Sandbox Code Playgroud) 我正在将Color类作为c ++中非常基本的图形API的一部分.所以我决定看一下微软的.NET框架,发现他们的Color类有HSB的功能.
然后我开始研究,以确定我是否应该在课堂上提供HSB,HSL或HSV或所有这些.
所以,我有3个关于HSB,HSL,HSV的问题:
HSB与HSL相同吗?
如果没有,为什么没有HSBL甚至HSBLV?
我发现有很多不同的计算这些值的方法,有人能告诉我最快的吗?
我需要从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 …Run Code Online (Sandbox Code Playgroud) 有没有办法使用GLSL(片段着色器)有效地改变2D OpenGL纹理的色调?
有人有一些代码吗?
更新:这是user1118321建议的代码:
uniform sampler2DRect texture;
const mat3 rgb2yiq = mat3(0.299, 0.587, 0.114, 0.595716, -0.274453, -0.321263, 0.211456, -0.522591, 0.311135);
const mat3 yiq2rgb = mat3(1.0, 0.9563, 0.6210, 1.0, -0.2721, -0.6474, 1.0, -1.1070, 1.7046);
uniform float hue;
void main() {
vec3 yColor = rgb2yiq * texture2DRect(texture, gl_TexCoord[0].st).rgb;
float originalHue = atan(yColor.b, yColor.g);
float finalHue = originalHue + hue;
float chroma = sqrt(yColor.b*yColor.b+yColor.g*yColor.g);
vec3 yFinalColor = vec3(yColor.r, chroma * cos(finalHue), chroma * sin(finalHue));
gl_FragColor = vec4(yiq2rgb*yFinalColor, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
这是与参考相比的结果:

我试图在里面用Q切换I,但即使在0°左右,结果也是错误的
你有什么提示吗? …
我想使用webcam和python opencv跟踪白色.我已经有了跟踪蓝色的代码.
_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# define range of blue color in HSV
lower_blue = np.array([110,100,100])
upper_blue = np.array([130,255,255])
#How to define this range for white color
# Threshold the HSV image to get only blue colors
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(frame,frame, mask= mask)
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
Run Code Online (Sandbox Code Playgroud)
我应该给出什么值作为跟踪白色的下限和上限!! ?? 我尝试改变价值观,但我得到了其他颜色,但白色没有运气!
是HSV值还是BGR值指定为下限和上限???
PS:我必须把最后的结果作为二进制图像进行进一步处理!!
请帮我 !!!
任何人都可以向我解释为什么OpenCV中HSV图像的色调值仅为180°而不是整个360°?
我发现OpenCV使用的是一个180°的圆柱体,但我无法想象这样的圆柱体.
提前致谢!
Ĵ