- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将十字准线更改为具有相同 r (20) 的圆圈?
代码:
clc;
clear;
I = imread('peppers.png');
imshow(I);
colorCode = [0.6 0.8 0.5] *255;
r=20;
button = 1;
while sum(button) <=1
[x,y,button] = ginput(1)
I= insertShape(I,'FilledCircle',[x y r],'LineWidth',1, 'Color', colorCode, 'Opacity', 1);
imshow(I);
end
最佳答案
我使用的是 Matlab R2015b,我不知道 ginput
从那时起是否被修改过。在我的特定版本中,ginput
的十字准线代码主要在两个函数中:
function updateCrossHair(fig, crossHair)
% update cross hair for figure.
gap = 3; % 3 pixel view port between the crosshairs
cp = hgconvertunits(fig, [fig.CurrentPoint 0 0], fig.Units, 'pixels', fig);
cp = cp(1:2);
figPos = hgconvertunits(fig, fig.Position, fig.Units, 'pixels', fig.Parent);
figWidth = figPos(3);
figHeight = figPos(4);
% Early return if point is outside the figure
if cp(1) < gap || cp(2) < gap || cp(1)>figWidth-gap || cp(2)>figHeight-gap
return
end
set(crossHair, 'Visible', 'on');
thickness = 1; % 1 Pixel thin lines.
set(crossHair(1), 'Position', [0 cp(2) cp(1)-gap thickness]);
set(crossHair(2), 'Position', [cp(1)+gap cp(2) figWidth-cp(1)-gap thickness]);
set(crossHair(3), 'Position', [cp(1) 0 thickness cp(2)-gap]);
set(crossHair(4), 'Position', [cp(1) cp(2)+gap thickness figHeight-cp(2)-gap]);
end
function crossHair = createCrossHair(fig)
% Create thin uicontrols with black backgrounds to simulate fullcrosshair pointer.
% 1: horizontal left, 2: horizontal right, 3: vertical bottom, 4: vertical top
for k = 1:4
crossHair(k) = uicontrol(fig, 'Style', 'text',...
'Visible', 'off',...
'Units', 'pixels',...
'BackgroundColor', [1 0 0],...
'HandleVisibility', 'off',...
'HitTest', 'off'); %#ok<AGROW>
end
end
很有意思
insertShape
在工具箱中找到,这是因为圆圈被刻在图像中并且没有简单的方法来“移动”它。 hgconvertunits
用于确保单位为所需类型。 我发现可以移动的是annotation
.下面是一些示例代码,它可以跟随鼠标指针移动椭圆。由于 ginput
不可编辑,我将所有内容复制到一个函数中,并将对 ginput
的调用更改为新函数。下面是对 ginput
的修改。
function updateCrossHair(fig, crossHair)
% update cross hair for figure.
% get current point and positions; take care of units
cp = hgconvertunits(fig, [fig.CurrentPoint 0 0], fig.Units, 'pixels', fig);
figPos = hgconvertunits(fig, fig.Position, fig.Units, 'pixels', fig.Parent);
cp = cp(1:2)./figPos(3:4);
axesPos = fig.Children.Position;
% Early return if point is outside the figure
if cp(1) < axesPos(1) || cp(2) < axesPos(2) || cp(1) > (axesPos(1)+axesPos(3)) || cp(2) > axesPos(2)+axesPos(4)
return
end
diameter = 10; % pixels
crossHair.Position = [cp-diameter./figPos(3:4)/2, diameter./figPos(3:4)];
end
function crossHair = createCrossHair(fig)
crossHair = annotation(fig, 'ellipse', [0,0,0,0]);
crossHair.Color = 'w';
end
此方法有一个潜在的错误,即在用户输入结束时,当按下enter
键时,修改后的函数不会返回任何x
或y
值。事实上,while 循环中的函数输出是空矩阵。
为避免崩溃,只需在用户输入后添加一个检查,如下所示:
while sum(button) <=1
[x,y,button] = testf(1) % use modified ginput
if isempty(x) || isempty(y)
break
end
I= insertShape(I,'FilledCircle',[x y r],'LineWidth',1, 'Color', colorCode, 'Opacity', 1);
imshow(I);
end
关于matlab - 更改 ginput 十字准线外观 - Matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50004259/
我正在尝试在 ipython 笔记本中创建交互式绘图。我正在尝试从 matplotlib 的网站运行示例代码,如下所示。 t = arange(10) plot(t, sin(t)) print("P
我在使用 matplotlib.pyplot ginput() 函数存储点击点时遇到了一些奇怪的行为。第一次单击时,所单击图像的轴范围发生变化,每侧增加 200。在绘制新内容之前,图像将保留此空白边界
我需要使用 matplotlib 函数 ginput() 在绘图中定义一个区域。然而,由于它是一个不规则的形状,并且在每个图中都会有所不同,所以我无法定义手头会有多少点,即 x = randn(10,
如何将十字准线更改为具有相同 r (20) 的圆圈? 代码: clc; clear; I = imread('peppers.png'); imshow(I); colorCode = [0.6 0.
我读入一个文件并用 pandas DataFrame 绘制它。索引是DatetimeIndex,然后我使用ginput(1)方法获取一个点,但是我获取的坐标是错误的。 代码如下: import pan
我有一个 Python 值列表,我正在使用 matplotlib 绘制它。然后我尝试在 matplotlib 中使用 ginput 单击图形上的两个点,从中获取 X 坐标,在它们之间切分我的原始列表。
我正在考虑将 Python 与 MySQLdb 和 Matplotlib 一起使用。我希望在基于 ginput 图的 matplotlib 散点图中使用查询的值。我有以下工作: import matp
我的问题很简单,有没有人知道如何使用 matlab 的 ginput忽略同一位置的后续点击? 我已经想到了一些可能性,比如一个 for 循环,它检查存储的数组是否有相同的值并将它们删除,但是后来我遇到
我正在尝试使用“ginput”通过允许用户单击位置来测量 matplotlib 图形中的距离。我可以在 matplotlib 图中独立地完成此操作,但是当我尝试将图设置到 matplotlib Can
我在 MATLAB 中使用 ginput 函数来使用光标收集图像上的许多 x,y 坐标。我沿着图像的特定路径行进,需要放大以获得精确的坐标,但在使用 ginput 时放大选项被禁用。关于如何解决这个问
当我实现代码的 ginput 部分时出现警告。 def twoClicks(color_img): from pylab import ginput, rcParams, imshow, dr
我正在使用 ginput 沿着时间信号对几个点进行图形选择。有时,当信号太密集时,在选择点之前放大一个区域可能很有用。我的问题是 zoom to rectangle 选项似乎在 ginput 中被考虑
我正在尝试从图像中获取用户选择的点(以获取多边形)。我已经在我的很多代码中嵌入了一个 matplotlib.figure,所以我更愿意使用这种样式而不是 pylab 的图形。我正在尝试执行以下操作:
我是一名优秀的程序员,十分优秀!