我有X,Y,Z格式的数据,其中所有都是一维数组,Z是坐标(X,Y)处的测量幅度.我想将这些数据显示为轮廓或"imshow"图,其中轮廓/颜色代表值Z(幅度).
用于测量的网格和X和Y外观是不规则间隔的.
非常感谢,
LEN(X)= 100
LEN(Y)= 100
LEN(Z)= 100
我试图获得一本红皮书的最大轮廓.我对代码有一点问题,因为它获得了最小对象(blob)的轮廓而不是最大的对象,我似乎无法弄清楚为什么会发生这种情况
我使用的代码:
camera = cv2.VideoCapture(0)
kernel = np.ones((2,2),np.uint8)
while True:
#Loading Camera
ret, frame = camera.read()
blurred = cv2.pyrMeanShiftFiltering(frame, 3, 3)
hsv = cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV)
lower_range = np.array([150, 10, 10])
upper_range = np.array([180, 255, 255])
mask = cv2.inRange(hsv, lower_range, upper_range)
dilation = cv2.dilate(mask,kernel,iterations = 1)
closing = cv2.morphologyEx(dilation, cv2.MORPH_GRADIENT, kernel)
closing = cv2.morphologyEx(dilation, cv2.MORPH_CLOSE, kernel)
#Getting the edge of morphology
edge = cv2.Canny(closing, 175, 175)
_, contours,hierarchy = cv2.findContours(edge, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# Find the index of the largest contour
areas …Run Code Online (Sandbox Code Playgroud) 我有一个宠物项目来创建地图图像,在那里我绘制道路和其他东西在地形高程的等高线图上.它旨在计划山地自行车路线(过去我手工制作了一些矢量图,它们非常适合可视化).
目前,我从GeoTIFF下载数字高程模型:http: //www.ecologia.ufrgs.br/labgeo/arquivos/downloads/dados/SRTM/geotiff/rs.rar
然后使用GDAL和Matplotlib contourf函数创建绘图:
from osgeo import gdal
import matplotlib
import matplotlib.pyplot as plt
from pylab import cm
import numpy
f = 'rs.tif'
elev = gdal.Open(f)
a = elev.GetRasterBand(1).ReadAsArray()
w = elev.RasterXSize
h = elev.RasterYSize
print w, h
altura = (0.35, 0.42)
largura = (0.70, 0.82)
a = a[int(h*altura[0]):int(h*altura[1]),
int(w*largura[0]):int(w*largura[1])]
cont = plt.contourf(a, origin='upper', cmap=cm.gist_earth, levels=numpy.arange(0,1000,20))
plt.title('Altitudes - max: %d m; min: %d m' % (numpy.amax(a), numpy.amin(a)))
plt.show()
Run Code Online (Sandbox Code Playgroud)
这使:

问题是轮廓线是"白色的",并产生一些视觉污染,这是不希望的,因为我想稍后绘制道路和河流.
因此,我试图contourf通过参数设置或通过hack(更改源代码)来修改创建这些较轻线的方式,类似于此处提出的方法:
此外,如果有人知道如何以更优雅的方式生成这样的地图,使用其他库,我会非常感谢这个提示!
谢谢阅读.
我有以下格式的2D高度图
06 36 39 42 43 55 ...
37 40 43 43 45 46 ...
40 43 44 45 46 48 ...
44 44 46 47 48 50 ...
41 44 45 47 48 48 ...
...
Run Code Online (Sandbox Code Playgroud)
我需要将其重新映射为基于grin的轮廓格式(因此它可以进一步映射到精灵)
. . . . | . .
. . . . \ . .
. . . / / . .
. . . | . . .
. . . | . . .
. / - / . . . …Run Code Online (Sandbox Code Playgroud) 我有一个3D数据阵列(2个空间维度和1个时间维度),我正在尝试使用matplotlib.animate生成动画轮廓图.我使用此链接作为基础:
http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/
这是我的尝试:
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
from numpy import array, zeros, linspace, meshgrid
from boutdata import collect
# First collect data from files
n = collect("n") # This is a routine to collect data
Nx = n.shape[1]
Nz = n.shape[2]
Ny = n.shape[3]
Nt = n.shape[0]
fig = plt.figure()
ax = plt.axes(xlim=(0, 200), ylim=(0, 100))
cont, = ax.contourf([], [], [], 500)
# initialisation function
def init():
cont.set_data([],[],[])
return cont, …Run Code Online (Sandbox Code Playgroud) 我试图为某些数据找到(但不是绘制!)轮廓线:
from pprint import pprint
import matplotlib.pyplot
z = [[0.350087, 0.0590954, 0.002165], [0.144522, 0.885409, 0.378515],
[0.027956, 0.777996, 0.602663], [0.138367, 0.182499, 0.460879],
[0.357434, 0.297271, 0.587715]]
cn = matplotlib.pyplot.contour(z)
Run Code Online (Sandbox Code Playgroud)
我知道cn包含我想要的轮廓线,但我似乎无法找到它们.我尝试了几件事:
print dir(cn)
pprint(cn.collections[0])
print dir(cn.collections[0])
pprint(cn.collections[0].figure)
print dir(cn.collections[0].figure)
Run Code Online (Sandbox Code Playgroud)
无济于事.我知道cn是一个ContourSet,并且cn.collections是一个LineCollections 数组.我认为a LineCollection是一系列线段,但我无法弄清楚如何提取这些段.
我的最终目标是创建一个KML文件,在世界地图上绘制数据,以及该数据的轮廓.
但是,由于我的一些数据点很接近,而其他数据点很远,我需要构成轮廓的实际多边形(线串),而不仅仅是轮廓的光栅化图像.
我有点惊讶qhull不做这样的事情.
使用Mathematica ListContourPlot然后导出为SVG工作,但我想使用开源的东西.
我不能使用众所周知的CONREC算法,因为我的数据不在网格上(对于给定的x值,并不总是有多个y值,反之亦然).
该解决方案不需要python,但必须是Linux上的开源和可运行的.
在python中,如果我有一组数据
x, y, z
Run Code Online (Sandbox Code Playgroud)
我可以散布
import matplotlib.pyplot as plt
plt.scatter(x,y,c=z)
Run Code Online (Sandbox Code Playgroud)
我如何得到plt.contourf(x,y,z)分散?
我遇到了一个(希望)简单的问题.我的目标是绘制一条用数据(不仅是文本)中断的虚线.

由于我发现通过linestyle ='dashed'创建了一个虚线,所以任何帮助都可以将数据放在破折号之间.
Matplotlib已经存在类似于标签的东西 - 正如我在轮廓线演示中看到的那样.

更新:
理查德在评论中提到的问题链接非常有用,但不是我通过评论提到的100%.目前,我是这样做的:
line_string2 = '-10 ' + u"\u00b0" +"C"
l, = ax1.plot(T_m10_X_Values,T_m10_Y_Values)
pos = [(T_m10_X_Values[-2]+T_m10_X_Values[-1])/2., (T_m10_Y_Values[-2]+T_m10_Y_Values[-1])/2.]
# transform data points to screen space
xscreen = ax1.transData.transform(zip(T_m10_Y_Values[-2::],T_m10_Y_Values[-2::]))
rot = np.rad2deg(np.arctan2(*np.abs(np.gradient(xscreen)[0][0][::-1])))
ltex = plt.text(pos[0], pos[1], line_string2, size=9, rotation=rot, color='b',ha="center", va="bottom",bbox = dict(ec='1',fc='1', alpha=0.5))
Run Code Online (Sandbox Code Playgroud)
在这里,您可以看到结果的快照.零下20°C没有BBox.
我想在等高线图上控制matplotlib clabels的位置,但不使用clabel中的manual = True标志.例如,我想指定一个x坐标,并在通过该行的点处创建标签.我看到你可以使用get_position()来获取各个标签的位置,但我仍然坚持这一点.任何帮助将不胜感激.谢谢!
我正在研究视网膜眼底图像.图像由黑色背景上的圆形视网膜组成.通过OpenCV,我设法获得了围绕整个圆形Retina的轮廓.我需要的是从黑色背景中裁剪出圆形视网膜.