简短版本:是否有用于显示图像的Python方法,该图像实时显示像素指数和强度?因此,当我将光标移到图像上时,我会不断更新显示,例如pixel[103,214] = 198(灰度)或pixel[103,214] = (138,24,211)rgb?
长版:
假设我打开一个保存为ndarray的灰度图像im并使用imshowmatplotlib 显示它:
im = plt.imread('image.png')
plt.imshow(im,cm.gray)
Run Code Online (Sandbox Code Playgroud)
我得到的是图像,在窗口框架的右下角,是像素索引的交互式显示.除了它们不完全,因为值不是整数:x=134.64 y=129.169例如.
如果我以正确的分辨率设置显示器:
plt.axis('equal')
Run Code Online (Sandbox Code Playgroud)
x和y值仍然不是整数.
在imshow从方法spectral包做一个更好的工作:
import spectral as spc
spc.imshow(im)
Run Code Online (Sandbox Code Playgroud)
然后在右下角我现在有了pixel=[103,152]例如.
但是,这些方法都没有显示像素值.所以我有两个问题:
imshowfrom matplotlib(和imshowfrom scikit-image)显示正确的(整数)像素索引吗?假设我输入:
a = uint8(200)
a*2
Run Code Online (Sandbox Code Playgroud)
然后结果是400,并且重铸为uint16类型.
然而:
a = array([200],dtype=uint8)
a*2
Run Code Online (Sandbox Code Playgroud)
结果是
array([144], dtype=uint8)
Run Code Online (Sandbox Code Playgroud)
乘法已经以256为模进行,以确保结果保持在一个字节中.
我对"类型"和"dtypes"感到困惑,其中一个用于优先于另一个.如您所见,类型可能会对输出产生显着影响.
例如,我可以创建单个数量的dtype uint8,以便对该数字的操作将以256为模进行吗?或者,我可以创建一个类型(不是dtype)uint8的数组,以便对它的操作产生超出0-255范围的值吗?
例如,如果我加载并显示图像
c = imread('cameraman.tif');
imshow(c)
Run Code Online (Sandbox Code Playgroud)
然后在绘图窗口中,在图像本身下,有两个数字表示当前光标位置的形式
[39.25, 120.6]
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
此信息是否可以包含像素的灰度/ rgb值,例如
[23, 46] = 127
要么
[23, 46] = (46,128,210)?
我试过摆弄"轴"命令,但我找不到任何有用的东西.
我想我想要的是类似Matlab的"像素信息工具" impixelinfo:http:
//www.mathworks.com.au/help/images/ref/impixelinfo.html虽然我知道来自octave图像wiki的http:// wiki .octave.org/Image_package是impixelinfo不是在目前八音实施.但也许有另一种方法可以达到相同的效果?
我在linux(Ubuntu 12.04)下使用Octave-3.8.0,图像包2.2.0.
我让自己很困惑。我有一组 python 函数,所有这些函数都放在一个名为 (假设) 的文件中useful.py。然后我可以将模块读入我的 ipython
import useful as uf
Run Code Online (Sandbox Code Playgroud)
然后我可以访问各个功能
uf.meaning_of_life()
Run Code Online (Sandbox Code Playgroud)
等等。标准的东西。
但是 - 此文件中的某些函数会调用其他函数。我可以随时使用 调用单个函数uf.,但是相互调用的函数呢?如果一个被调用的函数eat引用了另一个被调用的函数chew,如何eat知道在哪里找到chew?我可以调用 asuf.eat和uf.chew。
我可以通过简单地执行execfile('useful.py')非常有效的操作来忽略所有这些,但我想更多地了解模块系统。
目前,当import我尝试使用我的函数时会产生错误;当我使用时execfile一切正常。
我很欣赏这可能会被解释为初学者的问题,但我是从 Matlab 背景开始接触 Python 的,我自然倾向于使用execfile. 非常欢迎指向信息的指针。
这是我正在努力解决的事情的一个简单示例:
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: test = pd.DataFrame(np.random.randn(4,4),columns=list('ABCD'))
In [4]: for i in range(4):
....: test.iloc[i,i] = np.nan
In [5]: test
Out[5]:
A B C D
0 NaN 0.136841 -0.854138 -1.890888
1 -1.261724 NaN 0.875647 1.312823
2 1.130999 -0.208402 NaN 0.256644
3 -0.158458 -0.305250 0.902756 NaN
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用sum对行求和,所有NaN值都被视为零:
In [6]: test['Sum'] = test.loc[:,'A':'D'].sum(axis=1)
In [7]: test
Out[7]:
A B C D Sum
0 NaN 0.136841 -0.854138 -1.890888 …Run Code Online (Sandbox Code Playgroud) 我正在从Matlab背景转向python,并且我还有一些基本的操作我还没有用Python/skimage来征服:
如何将用户生成的线性过滤器(以小型2d数组给出)应用于图像?我可以用scipy.ndimage.convolve来做,但是在skimage中有一个方法吗?
在Matlab中,图像过滤总是返回与其输入相同的数字类型的结果,无论是uint8还是float.skimage的行为方式是否相同?
在某处,skimage是否包含不清晰的遮蔽物?(我在PIL中发现了一个非锐化的屏蔽过滤器,但这有点痛苦,因为PIL使用自己的Image类,而不是ndarrays).
有没有一种方法,可能类似于Matlab的"colfilt",用户可以通过它将非线性滤镜应用于图像?这个想法是用户提供一个功能,从3x3阵列产生一个数字,比如说; 然后该功能作为空间滤镜应用于整个图像.
我正在尝试一些数论函数,并处理大整数.但是,我希望能够从提示符中读取表达式.我有一个定义的函数
factor :: Integer -> Integer
Run Code Online (Sandbox Code Playgroud)
如果我进入
ghci> factor 2047
Run Code Online (Sandbox Code Playgroud)
它工作正常.但我无法进入
ghci> factor 2^11-1
Run Code Online (Sandbox Code Playgroud)
因为表达式2^11-1没有被评估(在提示符下)到Integer.我可以绕过这个
ghci> factor (toInteger 2^11-1)
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有办法自动将表达式读作Integer值?
如果我尝试编辑先前的shell命令(通过历史记录键获得),则光标变为下划线。如果该命令涉及目录或文件名,则已经加了下划线,因此光标就消失了。
我正在使用zprezto-如何更改光标字符或形状?