您的位置:首页 > 运维架构

关于opencv中的颜色模型转换之CV_BGR2HSV

2017-08-04 16:53 483 查看
1.opencv函数cvCvtColor(rgb_im,hsv_im,CV_BGR2HSV)中使用的RGB颜色空间转到HSV算法:

max=max(R,G,B)

  min=min(R,G,B)

  if R = max, H = (G-B)/(max-min)

  if G = max, H = 2 + (B-R)/(max-min)

  if B = max, H = 4 + (R-G)/(max-min)

  H = H * 60

  if H < 0, H = H + 360

  V=max(R,G,B)

  S=(V-min)/V,ifV=0,S=0,(对于8bit虽然帮助文档上如是写S=(V-min)*255/V,但实测S:0~1)

因此,对于8bit图像可直接输入,根据该算法所得结果中:范围H:0~360,S:0~1,V:0~255,

2.图像精度转换cvConvertScale()

通常我们获取的图像深的为IPL_DEPTH_8U,而上述hsv_im已超出该范围。因此我们定义hsv_im的深度为IPL_DEPTH_32F,而源图像为IPL_DEPTH_8U,如果直接调用函数cvCvtColor会出项输入不匹配的错处,因此要将源图像转换到IPL_DEPTH_32F深度,并归一化像素值。这一步使用cvConvertScale(hsv_im,hsv_im_float,1/255),然后调用cvCvtColor(hsv_im_float,hsv_im,CV_BGR2HSV)即可得到正确的HSV值,但HSV值与matlab有一定误差,原因不明。

cvtColor(temp,tempGray,CV_BGR2GRAY);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: