根据像素位置注释图像

根据像素位置注释图像

我有一张图片,正在通过 Ti 在表格内调用它。Z。

我试图在此图像中标记的位置通过 Web 应用程序存储在我的数据库中,该应用程序基于像素捕获 (x,y) 中的坐标,例如 (254,145)。但在我的 LaTeX 代码中,位置被标记为 1,2,3,4,...,10。

如何根据像素标记位置?如何从左上角而不是左下角开始我的位置 (0,0)?

带注释的图像

{\begin{tikzpicture} \node [
       above right,
       inner sep=0] (image) at (0,0) {\includegraphics[width=11.535833333cm, height=10.900833333cm]{adeck.png}};
   \begin{scope} %[
  x={($0.1*(image.south east)$)},
  y={($0.1*(image.north west)$)}]
% Grid
\draw[lightgray,step=1] (image.south west) grid (image.north east);
 
% Axes' labels
    \foreach \x in {0,1,...,10} { \node [above] at (\x,0) {\x}; }
    \foreach \y in {0,1,...,10} { \node [right] at (0,\y) {\y};}
    
   % Labels
   \node[circle,fill=green] at (6.0153020833,4.6302083333,){\small };
    
   \end{scope}
   \end{tikzpicture}} 

答案1

这实际上只是一个计算问题。您知道图像的像素大小(我使用的图像是 192 × 108 像素),并且知道标记位置的基于像素的坐标。您进一步将 tikzpicture 的 x 和 y 值设置为 0.1 × 图像的宽度(或高度)。

鉴于此,将节点附加到某个基于像素的坐标上非常简单,因为 x 和 y 值只是 10 × <基于像素的坐标 x(或 y)值> : <基于像素的图像宽度(或高度)>。您可以使用该calc库即时进行这些计算。

\documentclass[border=10pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture} 

\node[inner sep=0, anchor=south west] (image) at (0,0) {\includegraphics[width=17.42cm, height=9.8cm]{example-1.png}};
   
\begin{scope}[
    x={($0.1*(image.south east)$)},
    y={($0.1*(image.north west)$)}
]

% Grid
\draw[lightgray,step=1] (image.south west) grid (image.north east);

% Axes' labels
\foreach \x in {0,1,...,10} { \node [below] at (\x,0) {\x}; }
\foreach \y in {0,1,...,10} { \node [left] at (0,\y) {\y}; }

% Labels
\node[circle,fill=green] at ({10*139/192},{10*77/108}) {};

\end{scope}
\end{tikzpicture}

\end{document}

在此处输入图片描述

不准确是由于舍入误差造成的。

如果要将其锚定在顶部,只需翻转相关内容(当然,基于像素的坐标的 y 值也应遵循此逻辑):

\documentclass[border=10pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture} 

\node[inner sep=0, anchor=north west] (image) at (0,0) {\includegraphics[width=17.42cm, height=9.8cm]{example-1.png}};
   
\begin{scope}[
    x={($0.1*(image.north east)$)},
    y={($0.1*(image.south west)$)}
]

% Grid
\draw[lightgray, xstep=1, ystep=-1] (image.south west) grid (image.north east);

% Axes' labels
\foreach \x in {0,1,...,10} { \node [above] at (\x,0) {\x}; }
\foreach \y in {0,1,...,10} { \node [left] at (0,\y) {\y}; }

% Labels
\node[circle,fill=green] at ({10*139/192},{10*30/108}) {};

\end{scope}
\end{tikzpicture}

\end{document}

有一件事要注意:因为我们翻转了的 y 值tikzpicture,所以我们需要相应地调整网格的选项:xstep=1, ystep=-1

在此处输入图片描述

相关内容