0

我正在 matlab 中创建一个图像处理项目。我想用鼠标从图像中获取 5 个坐标并将它们保存到矩阵中。当我运行项目时,我只单击一次,但矩阵采用相同的坐标。我该如何解决?

function ImageClickCallback ( objectHandle , eventData )
array = 3:2;
for i = 1:3
   axesHandle  = get(objectHandle,'Parent');
   coordinates = get(axesHandle,'CurrentPoint'); 
   coordinates = coordinates(1,1:2);
   array(i,1) = coordinates(1);
   array(i,2) = coordinates(2);
end
disp(array);

例如,当我单击图像上的一个点时,我正在获取此结果。我无法选择其他点。

99.3806   37.1915 
99.3806   37.1915
99.3806   37.1915
4

1 回答 1

3

一个更安全的选择是使用ginput,您可以使用它选择可变数量的点并轻松存储它们的坐标。你不需要循环;一旦选择了所有点,就会存储坐标。

这是一个简单的例子:

clear
clc
close all

A = imread('peppers.png');

imshow(A,[]);
hold on

%// Number of points
N = 5;

array = zeros(N,2);

%// Use a for loop and plot 1 point at a time.
for k = 1:N

   [array(k,1),array(k,2)] = ginput(1);

   %// Display the points
   scatter(array(k,1),array(k,2),60,'k','filled')

end

示例输出array

   123.0000   87.0000
   95.0000  206.0000
  256.0000   85.0000
  236.0000  253.0000
  395.0000  117.0000

以及显示点的图像:

在此处输入图像描述

因此,您可能看起来像这样:

function ImageClickCallback ( objectHandle , eventData )

   array = zeros(3,2);

   [array(:,1),array(:,2)] = ginput(3);
于 2015-04-27T23:59:10.580 回答