Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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 将二维形状转换为一维空间(形状分类。)_Python_Image Processing - Fatal编程技术网

Python 将二维形状转换为一维空间(形状分类。)

Python 将二维形状转换为一维空间(形状分类。),python,image-processing,Python,Image Processing,我正在寻找一个基于以下步骤使用Python将二维形状转换为一维空间的代码/库示例: 找到形状的质心 通过选择质心作为参考原点,逆时针展开外轮廓,将其转换为距离信号,该信号由每个边界像素和质心之间的所有距离组成(如图像) 谢谢大家! 前段时间我做了类似的事情是为了好玩,灵感来自于一场卡格尔比赛。我使用opencv查找图像的轮廓。下面是python 2.7的代码。有关返回轮廓的方向,请参见。您可能需要根据自己的需要对其进行调整,特别是阈值部分。希望这有帮助 import cv2 import nu

我正在寻找一个基于以下步骤使用Python将二维形状转换为一维空间的代码/库示例:

  • 找到形状的质心
  • 通过选择质心作为参考原点,逆时针展开外轮廓,将其转换为距离信号,该信号由每个边界像素和质心之间的所有距离组成(如图像)

  • 谢谢大家!

    前段时间我做了类似的事情是为了好玩,灵感来自于一场卡格尔比赛。我使用
    opencv
    查找图像的轮廓。下面是python 2.7的代码。有关返回轮廓的方向,请参见。您可能需要根据自己的需要对其进行调整,特别是阈值部分。希望这有帮助

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    
    def shape_desc(im):
        # threshold image
        _, bw = cv2.threshold(im, 128, 255, cv2.THRESH_BINARY)
        # find contours
        contours, hierarchy = cv2.findContours(im.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
        # extract largest contour
        largest_idx = np.argmax([len(contours[i]) for i in range(0, len(contours))])
        # get (x,y) coordinates
        x = np.array([contours[largest_idx][i][0][0] for i in range(0, len(contours[largest_idx]))], dtype = np.float).reshape((len(contours[largest_idx]), 1))
        y = np.array([contours[largest_idx][i][0][1] for i in range(0, len(contours[largest_idx]))], dtype = np.float).reshape((len(contours[largest_idx]), 1))
        # find the centroid
        m = cv2.moments(np.array([[x[i][0], y[i][0]] for i in range(0, len(x))]).reshape((-1, 1 ,2)).astype(np.int32))
        x_bar = m['m10']/m['m00']
        y_bar = m['m01']/m['m00']
    
        x_1 = np.array([i[0] for i in x])
        y_1 = np.array([i[0] for i in y])
        # take the centroid as the reference
        x = x_1 - x_bar
        y = y_1 - y_bar
    
        return np.sqrt(x*x + y*y)
    
    下面是将此应用于以下形状相似的图像的结果。请注意,图像和绘图已重新缩放

    filename = '19.jpg'
    im = cv2.imread(filename, 0)
    
    desc = shape_desc(im)
    plt.stem(desc)
    

    不久前,我做了一些类似的事情,是为了好玩,灵感来自一场卡格尔比赛。我使用
    opencv
    查找图像的轮廓。下面是python 2.7的代码。有关返回轮廓的方向,请参见。您可能需要根据自己的需要对其进行调整,特别是阈值部分。希望这有帮助

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    
    def shape_desc(im):
        # threshold image
        _, bw = cv2.threshold(im, 128, 255, cv2.THRESH_BINARY)
        # find contours
        contours, hierarchy = cv2.findContours(im.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
        # extract largest contour
        largest_idx = np.argmax([len(contours[i]) for i in range(0, len(contours))])
        # get (x,y) coordinates
        x = np.array([contours[largest_idx][i][0][0] for i in range(0, len(contours[largest_idx]))], dtype = np.float).reshape((len(contours[largest_idx]), 1))
        y = np.array([contours[largest_idx][i][0][1] for i in range(0, len(contours[largest_idx]))], dtype = np.float).reshape((len(contours[largest_idx]), 1))
        # find the centroid
        m = cv2.moments(np.array([[x[i][0], y[i][0]] for i in range(0, len(x))]).reshape((-1, 1 ,2)).astype(np.int32))
        x_bar = m['m10']/m['m00']
        y_bar = m['m01']/m['m00']
    
        x_1 = np.array([i[0] for i in x])
        y_1 = np.array([i[0] for i in y])
        # take the centroid as the reference
        x = x_1 - x_bar
        y = y_1 - y_bar
    
        return np.sqrt(x*x + y*y)
    
    下面是将此应用于以下形状相似的图像的结果。请注意,图像和绘图已重新缩放

    filename = '19.jpg'
    im = cv2.imread(filename, 0)
    
    desc = shape_desc(im)
    plt.stem(desc)
    

    不知道是否有帮助,但质心可以用scipy计算:scipy还有一个模块用于计算阵列中两点之间的距离:另外请注意,OpenCV中的计数可能更适合您的需要:谢谢,Bobo。我会检查的。似乎有帮助。你想用它作为形状匹配的形状描述符吗?@dhanushka这是形状描述符,兄弟。图像a将被转换为图像b。不知道这是否有帮助,但质心可以用scipy计算:scipy还有一个模块用于计算阵列中两点之间的距离:还要注意,OpenCV中的计数可能更适合您的需要:谢谢,Bobo。我会检查的。似乎有帮助。你想用它作为形状匹配的形状描述符吗?@dhanushka这是形状描述符,兄弟。图像a将转换为图像b。谢谢。我会查的,谢谢。我会检查的。