MATLAB:如何在不使用视觉包的情况下在图像上打印形状

时间:2016-10-07 17:02:02

标签: matlab

所以,我有一个点列表,我想在MATLAB中的图像上用小方框绘制它们。我的代码是:

img = imread('my_img.jpg');
corners = rand(20, 3);
corners(:,1) = uint8(size(img, 1) * corners(:,1));
corners(:,2) = uint8(size(img, 2) * corners(:,2));

figure(); hold on;
imshow(img, []);
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
for i = 1:size(corners, 1)
    rectangle('Position', [corners(i, 1:2) - 4 corners(i, 1:2) + 4], 'EdgeColor' 'r');
end
hold off;

然而,我得到了一些我想要的奇怪模仿。大多数矩形在图像上都不均匀,并且没有一个中心。

enter image description here 如何使矩形以图像中的适当像素为中心,宽度值也以像素为单位?哦,我不能使用视觉包,所以没有insertShapes = /。

更新 我假设矩形上的四个点代表左下角和右上角的笛卡尔坐标。相反,最后两个坐标表示框的大小。所以,如果我将矩形线修改为:

rectangle('Position', [corners(i,1:2) 4 4], 'EdgeColor', 'r');

还要更改我的corners变量:

corners(:, 1) = size(img, 1) - corners(:, 1);
corners(:, 2) = size(img, 2) - corners(:, 2);

现在,我明白了:

enter image description here

这是更接近的,但当我检查我的corners对象的实际值时,我发现没有任何框应该离开图像。那么,这里发生了什么?

0 个答案:

没有答案