HSV颜色检测

HSV颜色检测,第1张

如果要进行颜色检测,HSV颜色空间是当前最常用的。

HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)。

RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Saturation Value)颜色模型是面向用户的。

HSV模型的三维表示从RGB立方体演化而来。设想从RGB沿立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿垂直轴测量。

OpenCV中HSV各个分量的取值范围

色调 H : 0 ~ 180

用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°, 蓝色为240°。它们的补色是:黄色为60°,青色为180°, 品红为300°;

饱和度 S :0 ~ 255

饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

亮度 V : 0 ~ 255

亮度表示颜色明亮的程度,对于光源色,亮度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

若要识别某种颜色,HSV的3个分量的范围得自己调了,官方的颜色区域不是特别靠谱。

一点经验:亮度V 几乎对颜色的识别没有影响,亮度与颜色大概关系不大,只与环境中的光照有关,为了算法的适应性更强,可以把亮度V的范围调成0~255。

对颜色识别影响最大的是色调,这个得仔细调,当然,为了适应性强,范围最好调宽点。

转换成HSV颜色空间后,居然有种印象派画作的感觉了

以下的程序,能将一幅图像中的 红色、蓝色、黄色找出来:

matlab编程中有时想调入电脑中的某个文件,这时不妨用windows传统的文件打开对话框试一试:

[filename, pathname] = uigetfile( ...

{'*.jpg*.tif*.png*.gif','All Image Files'...

'*.*','All Files' },...

'请选择要修改的图片(可多选)', ...

'MultiSelect', 'on')

此函数的用法为

[FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle,DefaultName)

FileName:返回的文件名

PathName:返回的文件的路径名

FilterIndex:选择的文件类型

FilterSpec:文件类型设置

DialogTitle:打开对话框的标题

DefaultName:默认指向的文件名

例子:(接来自matlab的帮助)

1.最简单的形式,只设置了一种可选择的文件类型

[FileName,PathName] = uigetfile('*.m','Select the M-file')

2.设置多种文件类型

[filename, pathname] = ...

uigetfile({'*.m''*.mdl''*.mat''*.*'},'File Selector')

3.可以为文件类型设置说明,注意书写格式

[filename, pathname] = uigetfile( ...

{'*.m*.fig*.mat*.mdl','MATLAB Files (*.m,*.fig,*.mat,*.mdl)'

'*.m', 'M-files (*.m)'...

'*.fig','Figures (*.fig)'...

'*.mat','MAT-files (*.mat)'...

'*.mdl','Models (*.mdl)'...

'*.*', 'All Files (*.*)'}, ...

'Pick a file')

4.可返回选择的文件类型序号,并且可以设置文件多选,设置文件多选时注意,当只选了一个文件时,返回的filename为字符串,选择多个文件时,返回的元胞类型。

[filename, pathname, filterindex] = uigetfile( ...

{ '*.mat','MAT-files (*.mat)'...

'*.mdl','Models (*.mdl)'...

'*.*', 'All Files (*.*)'}, ...

'Pick a file', ...

'MultiSelect', 'on')

5.可以设置默认文件名

uigetfile({'*.jpg*.tif*.png*.gif','All Image Files'...

'*.*','All Files' },'mytitle',...

'C:\Work\myfile.jpg')

更多文件对话框,可参考matlab帮助。

一点小技巧:当返回了一个文件的时候,可以用fullfile将路径和文件名组合起来,如

[filename, pathname] = uigetfile('*.m', 'Pick an M-file')

if isequal(filename,0)

disp('User selected Cancel')

else

disp(['User selected', fullfile(pathname, filename)])

end

fullfile的用法如下

f = fullfile('C:', 'Applications', 'matlab', 'myfun.m')

f = C:\Applications\matlab\myfun.m

上传一个自己编的小程序,用来实现图片文件的批量缩放(帮班级上传图片,但是图片太大了,太占空间,若一个一个缩小有太费事,于是就有了这个小程序,呵呵,仅为应用,未考虑异常处理)

%修改图片的大小

%%

clc

clear all

close all

%%

scale=inputdlg('缩放比(大于1为放大,小于1为缩小)','请输入缩放比',1,{'0.5'})

%%

[filename, pathname] = uigetfile( ...

{'*.jpg*.tif*.png*.gif','All Image Files'...

'*.*','All Files' },...

'请选择要修改的图片(可多选)', ...

'MultiSelect', 'on')

%%

if ~iscell(filename)

filename1{1}=filename

else

filename1=filename

end

%%

for i=1:length(filename1)

image=imread(strcat(pathname,filename1{i}))

image_resize=imresize(image,eval_r(scale{1}))

imwrite(image_resize,strcat(pathname,datestr(now, 'mmddHH'),filename1{i}))

end

其中的inputdlg函数实现一个要求用户输入信息的对话框,用法如下

answer = inputdlg(prompt,dlg_title,num_lines,defAns,options)

prompt:输入文本框的标签

dlg_title:对话框的标题

num_lines:输入文本框的行数

defAns:默认的文本框内容

options:一些可选的对话框选项

prompt={'Enter the matrix size for x^2:',...

'Enter the colormap name:'}

name='Input for Peaks function'

numlines=1

defaultanswer={'20','hsv'}

options.Resize='on'

options.WindowStyle='normal'

options.Interpreter='tex'

answer=inputdlg(prompt,name,numlines,defaultanswer,options)

返回为字符串,如果想转化为数字,可以是使用函数eval。

另外input函数也可以实现用户信息输入,不过是在命令行中输入,也很简单、常用。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11625204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存