我最好用Image来解释我的问题
我有一个轮廓和线条,其经过该轮廓.
在轮廓和直线的交叉点处,我想在直线和轮廓的交点处绘制一条垂直线,直到特定距离.
我知道交叉点以及线的斜率.
作为参考,我附上了这张图片.

我使用对数颜色缩放对轮廓图有问题.我想手动指定水平.然而,Matplotlib以一种奇怪的方式绘制颜色条 - 标签放置不好,只出现一种颜色.这个想法基于 http://adversus.110mb.com/?cat=8
那里有人,谁可以帮助我?我使用最新的git-repository matplotlib版本,v1.1.0(2011-04-21)
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.mlab import bivariate_normal
from matplotlib.colors import LogNorm
from matplotlib.backends.backend_pdf import PdfPages
delta = 0.5
x = np.arange(-3.0, 4.001, delta)
y = np.arange(-4.0, 3.001, delta)
X, Y = np.meshgrid(x, y)
Z = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
#axim = ax.imshow(Z, norm = LogNorm())
axim = ax.contourf(X,Y,Z,levels=[1e0,1e-1,1e-2,1e-3],cmap=plt.cm.jet,norm = LogNorm())
cb = fig.colorbar(axim)
pp = PdfPages('fig.pdf')
pp.savefig()
pp.close()
plt.show()
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助!它的工作原理很完美,正如你所建议的......但是,我有另一个问题:为什么matplotlib不允许我在对数模式中选择水平线的数量:
import …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用contourf在matplotlib中生成一个填充的等高线图.在图底部附近的锯齿状图案中缺少数据.轮廓图不仅在原始数据被遮盖的地方变成空白,而且在口袋中也是空白的,其中轮廓算法不能干净地插入,因为没有足够的良好数据邻域.
我知道如何扩展数据集以在这些口袋中产生合理的轮廓.但是,如果我绘制扩展数据,我会在任何地方获得轮廓填充.我想掩盖原始数据缺失的黑色或白色区域.
在之前的一个帖子中,我通过绘制第一张图像然后用掩盖坏区域的另一张图像覆盖它来学习如何为图像做到这一点.模拟将是下面的代码片段,但它不适用于轮廓......我无法通过bad_data imshow来掩盖扩展的contourf图.可能吗?
谢谢,Eli
import matplotlib.pyplot as plt
lev = [0.0,0.1,0.2,0.5,1.0,2.0,4.0,8.0,16.0,32.0]
norml = colors.BoundaryNorm(lev, 256)
# this is the contour plot, using extended_data so that the contours are plausibly extended
cs = plt.contourf(x,z,extended_data,levels = lev, cmap = cm.RdBu_r,norm = norml)
# now the attempt to cover it up -- but imshow will not cover up the original plot as it will with another image
bad_data = np.ma.masked_where(~data.mask, data.mask, copy=True)
plt.imshow(bad_data, interpolation='nearest', aspect = 'auto', cmap=cm.gray)
plt.show()
Run Code Online (Sandbox Code Playgroud) 我正在iOS中开发一些图像处理工具.目前,我有一个计算的特征轮廓,其类型为InputArrayOfArrays.
声明为:
std::vector<std::vector<cv::Point> > contours_final( temp_contours.size() );
Run Code Online (Sandbox Code Playgroud)
现在,我想提取由轮廓圈出的原始RGB图像的区域,并且可以进一步将子图像存储为cv :: Mat格式.我怎样才能做到这一点?
提前致谢!
我比较新ggplot2,而且我在为我的轮廓添加适当的标签时遇到了麻烦.
使用经典的火山示例,我可以在默认等值线图中添加标签:
library(plyr)
library(ggplot2)
library(directlabels)
library(reshape)
volcano<-melt(volcano)
v<-ggplot(volcano, aes(x,y,z=z))
e<-v + stat_contour(aes(colour=..level..))
direct.label(e)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,标签被适当地添加,但是如果我尝试为轮廓指定我自己的断点,事情会变得更复杂:
e<-v + stat_contour(aes(breaks=c(160, 170, 180), colour=..level..))
direct.label(e)
Run Code Online (Sandbox Code Playgroud)
现在,轮廓由我提供的断点指定,但标签仍然显示所有默认轮廓.如何仅绘制图形轮廓的标签?
一个相关的问题,我如何绘制默认情况下未包含的轮廓水平标签?说休息165:
e<-v + stat_contour(aes(breaks=c(165), colour=..level..))
direct.label(e)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
如何根据轮廓区域的大小对轮廓进行排序?我怎样才能获得最大/最小的一个?
我有一组对象的边界点.
我想用opencv作为轮廓绘制它.
我不知道如何将我的点转换为轮廓表示.
对于通过跟随调用获得的相同轮廓表示
contours,_ = cv2.findContours(image,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢
有没有人知道一种方法来转动contourLines多边形的输出,以绘制为填充轮廓,如同filled.contours.是否有关于如何绘制多边形以便查看所有可用级别的顺序?以下是一段不起作用的示例代码段:
#typical plot
filled.contour(volcano, color.palette = terrain.colors)
#try
cont <- contourLines(volcano)
fun <- function(x) x$level
LEVS <- sort(unique(unlist(lapply(cont, fun))))
COLS <- terrain.colors(length(LEVS))
contour(volcano)
for(i in seq(cont)){
COLNUM <- match(cont[[i]]$level, LEVS)
polygon(cont[[i]], col=COLS[COLNUM], border="NA")
}
contour(volcano, add=TRUE)
Run Code Online (Sandbox Code Playgroud)

我试图用scikit-image创建的骨架图像中的cv2 python库找到轮廓,我得到了这个错误:
contours, hierarchy = cv2.findContours(skel,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
TypeError: <unknown> data type = 0 is not supported
Run Code Online (Sandbox Code Playgroud)
我的问题是:我需要做什么才能转换为cv2和反之?
我知道opencv使用numpy.uint8类型来表示二进制图像而不是scikit-image numpy.float64
我还使用了mahotas(numpy.bool)和pymorph库.我如何从scikit-image转换为这些库,反之亦然?
Python中的OpenCV提供以下代码:
regions, hierarchy = cv2.findContours(binary_image, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
for region in regions:
x, y, w, h = cv2.boundingRect(region)
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 1)
Run Code Online (Sandbox Code Playgroud)
这给出了轮廓内的一些轮廓.如何在Python中删除它们?