Мне нравится решение @Yuks.Но есть и другая возможность, которую вы можете рассмотреть:
Вы также можете рассчитать среднее значение пикселей внутри прямоугольника и установить для цвета рамки значение инверсии. Таким образом, у вас всегда будет хороший контраст.
Вот код:
function PlotRect(im,x,y,w,h)
m = double(im( round(y): round(y+h) , round(x): round(x+w),:));
if (mean(m(:)) < 255/2)
col = [1 1 1];
else
col = [0 0 0];
end
rectangle('Position',[x y w h],'EdgeColor', col);
end
И тест:
function Inverse()
im = imresize( uint8(0:5:255), [250, 400]) ;
figure;imshow(im); hold on;
PlotRect(im,5,8,50,75);
PlotRect(im,100,30,25,42);
PlotRect(im,200,10,40,40);
PlotRect(im,300,10,40,40);
end