所以,我有一个点列表,我想在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;
然而,我得到了一些我想要的奇怪模仿。大多数矩形在图像上都不均匀,并且没有一个中心。
如何使矩形以图像中的适当像素为中心,宽度值也以像素为单位?哦,我不能使用视觉包,所以没有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);
现在,我明白了:
这是更接近的,但当我检查我的corners
对象的实际值时,我发现没有任何框应该离开图像。那么,这里发生了什么?