缓冲区和内存视图在python中的相同维度中不是连续的

问题描述 投票:2回答:1

我是Python的新手,我试图在下图中检测到一个椭圆:https://i.stack.imgur.com/5ybMh.jpg

但是当我使用这段代码时:

import matplotlib.pyplot as plt
from skimage import io
from skimage import data, color, img_as_ubyte
from skimage.feature import canny
from skimage.transform import hough_ellipse

image_rgb = io.imread('5ybMh.jpg',)

image_gray = color.rgb2gray(image_rgb)
edges = canny(image_gray, sigma=2.0,
              low_threshold=0.55, high_threshold=0.8)

result = hough_ellipse(edges, accuracy=20, threshold=250,
                       min_size=0, max_size=0)
result.sort(order='accumulator')

我得到了ValueError:

缓冲区和内存视图在同一维度上不是连续的。

我使用scikit-image版本0.12.3。我认为min_size = 0和max_size = 0存在问题,但我不确定这两个参数的错误是否存在上下文。在文档中,我找不到有关参数的非常有用的信息。 (http://scikit-image.org/docs/dev/api/skimage.transform.html?highlight=transform#skimage.transform.hough_ellipse

那么任何人都可以解释这个错误意味着什么,如果我必须更改参数,它们应该具有哪个值?

python-2.7 scikit-image hough-transform valueerror
1个回答
1
投票

我终于在你的代码中发现了这个问题! :)

使用您在图像的canny函数中设置的参数,edges图像为空! (全黑)

这似乎是hough_ellipse函数的问题,您可以通过尝试运行以下内容来查看:

import numpy as np
from skimage.transform import hough_ellipse
result = hough_ellipse(np.zeros((100, 100)))

如果更改canny函数中的参数以获得至少几个轮廓,则不再引发错误。我相信这种行为是一个错误(它应该只返回一个空列表),我将报告它。

以下是我可以无误地运行的代码。 Canny算法和椭圆的参数是随机获得的。

from skimage import io
from skimage import data, color
from skimage.feature import canny
from skimage.transform import hough_ellipse

image_rgb = io.imread('5ybMh.jpg',)

image_gray = color.rgb2gray(image_rgb)
edges = canny(image_gray, low_threshold=.4, high_threshold=.9)

result = hough_ellipse(edges, threshold=20, min_size=10)

在旁注中,我发现hough_ellipse函数对于一些不那么“拥挤”的边缘地图来说非常慢。如果您遇到同样的问题,可能需要某种工件清理(例如删除非常短的边缘)。

在第二方面,skimage版本0.13.0已经出局,使用库的最新版本总是好的;)

注意:此错误在库的0.14.x版本中得到修复。

© www.soinside.com 2019 - 2024. All rights reserved.