Buffer 和 memoryview 在 python 中的同一维度中不连续
Buffer and memoryview are not contiguous in the same dimension in python
我是 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:
Buffer and memoryview are not contiguous in the same dimension.
我使用 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)
所以谁能解释一下这个错误是什么意思,如果我必须更改参数,它们应该具有哪个值?
我终于在你的代码中找到了问题! :)
使用您在 canny
函数中为图像设置的参数,edges
图像是空的! (全黑)
这似乎是 hough_ellipse
函数的一个问题,您可以通过尝试 运行 以下内容看到:
import numpy as np
from skimage.transform import hough_ellipse
result = hough_ellipse(np.zeros((100, 100)))
如果您更改 canny
函数中的参数以获得至少一些轮廓,则不会再引发错误。我认为此行为是一个错误(它应该只是 return 一个空列表),我将报告它。
以下是我可以 运行 无误的代码。 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
函数对于一些不那么 "crowded" 的边缘贴图来说非常慢。如果您遇到同样的问题,也许您需要某种工件清理(例如删除非常短的边)。
另一方面,skimage
版本 0.13.0
已经发布,使用库的最新版本总是好的 ;)
注意:此错误已在库的 0.14.x
版本中修复。
我是 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:
Buffer and memoryview are not contiguous in the same dimension.
我使用 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)
所以谁能解释一下这个错误是什么意思,如果我必须更改参数,它们应该具有哪个值?
我终于在你的代码中找到了问题! :)
使用您在 canny
函数中为图像设置的参数,edges
图像是空的! (全黑)
这似乎是 hough_ellipse
函数的一个问题,您可以通过尝试 运行 以下内容看到:
import numpy as np
from skimage.transform import hough_ellipse
result = hough_ellipse(np.zeros((100, 100)))
如果您更改 canny
函数中的参数以获得至少一些轮廓,则不会再引发错误。我认为此行为是一个错误(它应该只是 return 一个空列表),我将报告它。
以下是我可以 运行 无误的代码。 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
函数对于一些不那么 "crowded" 的边缘贴图来说非常慢。如果您遇到同样的问题,也许您需要某种工件清理(例如删除非常短的边)。
另一方面,skimage
版本 0.13.0
已经发布,使用库的最新版本总是好的 ;)
注意:此错误已在库的 0.14.x
版本中修复。