1 简介
基于计算机视觉实现钟表时间识别含Matlab源码
2 部分代码
function [time_clock]= read(filepath)
I = imread(filepath);
[edges,center,maxxy,minxy] = edges_center(I);
[arrowslines,longest,center] = getarrows(I,edges,center,maxxy,minxy);
if isempty(arrowslines)
info = imfinfo(filepath);
center(1) = info.Width/2;
center(2) = info.Height/2;
maxxy = [info.Width info.Height];
minxy = [0 0];
[arrowslines,longest,center] = getarrows(I,edges,center,maxxy,minxy);
end
finallines = struct('point1',{},'point2',{});
if length(arrowslines) == 1
newlongest = arrowslines(1);
finallines(1) = arrowslines(1);
finallines(2) = arrowslines(1);
end
max_len = 0;
j=1;
if length(arrowslines) == 3
for i = 1 : length(arrowslines)
if ~isequal(arrowslines(i),longest)
finallines(j) = arrowslines(i);
len = norm(finallines(j).point1 - finallines(j).point2);
if ( len > max_len)
max_len = len;
newlongest = arrowslines(i);
end
j = j+1;
end
end
elseif length(arrowslines) == 2
finallines = arrowslines;
newlongest = longest;
end
if isequal(finallines(1),newlongest)
vminute = finallines(1).point2 - finallines(1).point1;
vhour = finallines(2).point2 - finallines(2).point1;
else
vhour = finallines(1).point2 - finallines(1).point1;
vminute = finallines(2).point2 - finallines(2).point1;
end
vminute = [vminute 0];
vhour = [vhour 0];
v2 = [0 1 0];
angle1 = atan2d(norm(cross(vminute,v2)),dot(vminute,v2));
angle2 = atan2d(norm(cross(vhour,v2)),dot(vhour,v2));
if vminute(1) > 0
angle1 = 360 - angle1;
end
if vhour(1) > 0
angle2 = 360 -angle2;
end
minute =roundn(angle1/6,0);
hour = floor(angle2/30);
if minute >= 10
time_clock = [num2str(hour) , ':', num2str(minute)];
else
time_clock = [num2str(hour) , ':0', num2str(minute)];
end
3 仿真结果
4 参考文献
[1]谢冰雪. 钟表时间显示方式的识别效率研究[J]. 科技资讯, 2013.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。