Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV:圆的排序数组_Python_Numpy_Opencv_Image Processing_Scikit Image - Fatal编程技术网

Python OpenCV:圆的排序数组

Python OpenCV:圆的排序数组,python,numpy,opencv,image-processing,scikit-image,Python,Numpy,Opencv,Image Processing,Scikit Image,我需要按照从上到下和从左到右的顺序对一组圆进行排序(作为HoughCircles函数的结果),但我无法做到这一点 我使用了python内置的排序方法,如下所示: circles=np.round(圆[0,:]).astype(“int”) 圆=已排序(圆,键=λv:[v[0],v[1]]) 我得到以下结果: 例如,在此示例图像中,它从圆61跳到64,从96跳到100,依此类推 它对一些圆进行了错误的排序,似乎是因为一些圆是一个或两个未对齐的像素,导致了这些错误 编辑: 以下是我的原始数据和示例

我需要按照从上到下和从左到右的顺序对一组圆进行排序(作为HoughCircles函数的结果),但我无法做到这一点

我使用了python内置的排序方法,如下所示:

circles=np.round(圆[0,:]).astype(“int”)
圆=已排序(圆,键=λv:[v[0],v[1]])
我得到以下结果:

例如,在此示例图像中,它从圆61跳到64,从96跳到100,依此类推

它对一些圆进行了错误的排序,似乎是因为一些圆是一个或两个未对齐的像素,导致了这些错误

编辑:

以下是我的原始数据和示例图像:

[[y,x,radius]]


或者,在使用
[v[0],v[1]]进行排序后,您可以对原始列表的一部分进行新的排序,行数作为块大小。这种解决方案的缺点是,您将与答题纸上的行数挂钩

    ...
    circles = np.round(circles[0,:]).astype("int")
    circles = sorted(circles, key=lambda v: [v[0], v[1]])

    NUM_ROWS = 30

    sorted_cols = []
    for k in range(0, len(circles), NUM_ROWS):
        col = circles[k:k+NUM_ROWS]
        sorted_cols.extend(sorted(col, key=lambda v: v[1]))

    circles = sorted_cols

    img_colored = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)

    if circles is not None:
    ...

您能再解释一下吗?如果您可以在排序之前提供原始图像,这将有助于在排序之前准确理解输入,并且您希望根据圆圈内的数字进行排序?或者取决于圆圈的颜色??我在每个圆圈内输入的数字只是为了表明顺序不正确。圆圈的颜色与这个例子无关,它只是一个圆圈的分类。原来的图片是一张答案纸,绿色的圆圈是填充的,红色的是空白的。到目前为止,我所理解的是你想要自动校正答案单,对吗?你能提供一个没有数字或颜色的原始样品吗?这样我可以更清楚地看到问题。是的,我正在自动更正答题纸。我用原始样本编辑了这个问题。我之所以要对数组进行排序,主要是为了通过迭代排序后的数组来确定每个圆圈的问题和备选方案。您可以分享给出错误结果的整个代码吗?谢谢。它确实起到了我想要的作用。我设法写了另一个解决方案,但你的更好。我的解决方案是找到圆网格的簇,然后将每个圆点更改为其簇的中心点。很高兴我能提供帮助。