小编Fra*_*lla的帖子

在NetworkX中无法将图形保存为jpg或png文件

我在NetworkX中有一个包含一些信息的图表.显示图表后,我想将其保存为文件jpgpng文件.我使用了该matplotlib功能,savefig但保存图像时,它不包含任何内容.这只是一个白色的图像.

这是我写的示例代码:

import networkx as nx
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(12,12))
ax = plt.subplot(111)
ax.set_title('Graph - Shapes', fontsize=10)

G = nx.DiGraph()
G.add_node('shape1', level=1)
G.add_node('shape2', level=2)
G.add_node('shape3', level=2)
G.add_node('shape4', level=3)
G.add_edge('shape1', 'shape2')
G.add_edge('shape1', 'shape3')
G.add_edge('shape3', 'shape4')
pos = nx.spring_layout(G)
nx.draw(G, pos, node_size=1500, node_color='yellow', font_size=8, font_weight='bold')

plt.tight_layout()
plt.show()
plt.savefig("Graph.png", format="PNG")
Run Code Online (Sandbox Code Playgroud)

为什么图像保存没有任何内部(只是白色)?

这是保存的图像(只是空白): 在此输入图像描述

python image matplotlib save networkx

9
推荐指数
1
解决办法
1万
查看次数

在Python中使用findContours的层次结构

我实现了一个Python脚本来识别手绘图中的形状.但是,脚本识别的形状多于所需的形状.

这是一个示例图片:

在此输入图像描述

这是脚本的输出:

在此输入图像描述

我写的部分代码如下:

def create_graph(vertex, color):
    for g in range(0, len(vertex)-1):
        for y in range(0, len(vertex[0][0])-1):
            cv2.circle(newimg, (vertex[g][0][y], vertex[g][0][y+1]), 3, (255,255,255), -1)
            cv2.line(newimg, (vertex[g][0][y], vertex[g][0][y+1]), (vertex[g+1][0][y], vertex[g+1][0][y+1]), color, 2)
    cv2.line(newimg, (vertex[len(vertex)-1][0][0], vertex[len(vertex)-1][0][1]), (vertex[0][0][0], vertex[0][0][1]), color, 2)


img = cv2.imread('star.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#Remove of noise, if any
kernel = np.ones((2, 2),np.uint8)
erosion = cv2.erode(gray, kernel, iterations = 1)

#Create a new image of the same size of the starting image
height, width = gray.shape
newimg = np.zeros((height, width, …
Run Code Online (Sandbox Code Playgroud)

python opencv hierarchy contour shape-recognition

9
推荐指数
1
解决办法
4207
查看次数

在 Python 中尝试使用 OpenCV 中的 cv2.matchShapes()

我在白板上随机画了一张,NAO 机器人拍了一张照片并试图重新创建相同的画。

我的画:

在此处输入图片说明

NAO的图:

在此处输入图片说明

在这一点上我想写一些关于它的结论,特别是我想从两张图片中提取轮廓并使用OpenCV函数匹配轮廓cv2.matchShapes()

但是,我为此编写了一个小Python代码脚本,它给了我一些错误。这是代码:

import numpy as np
import cv2

#get the pictures from the forlder
original = cv2.imread('eightgon.jpg')
drawn = cv2.imread('eightgon1.jpg')

#make them gray    
originalGray = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY)
drawnGray = cv2.cvtColor(drawn, cv2.COLOR_BGR2GRAY)

#apply erosion
kernel = np.ones((2, 2),np.uint8)
originalErosion = cv2.erode(originalGray, kernel, iterations = 1)
drawnErosion = cv2.erode(drawnGray, kernel, iterations = 1)

#retrieve edges with Canny
thresh = 175
originalEdges = cv2.Canny(originalErosion, thresh, thresh*2)
drawnEdges = cv2.Canny(drawnErosion, thresh, thresh*2)

#extract contours …
Run Code Online (Sandbox Code Playgroud)

python opencv numpy

6
推荐指数
1
解决办法
7945
查看次数

遍历节点并提取Networkx中的属性

我在python中定义了一些具有相应拐角点的形状,例如:

square = [[251, 184],
          [22, 192],
          [41, 350],
          [244, 346]]

triangle = [[250, 181],
            [133, 43],
            [21, 188]]

pentagon = [[131,  37],
            [11, 192],
            [37, 354],
            [247, 350],
            [256, 182]]
Run Code Online (Sandbox Code Playgroud)

然后,我利用NetworkX包创建一个Graph:

G = nx.DiGraph()
Run Code Online (Sandbox Code Playgroud)

然后,在图形中为每个形状创建一个节点:

G.add_node('square', points = square, center = (139, 265))
G.add_node('triangle', points = triangle, center = (139, 135))
G.add_node('pentagon', points = pentagon, center = (138, 223))
Run Code Online (Sandbox Code Playgroud)

现在是问题所在,如果满足条件,我必须创建一些连接两个节点的边。要满足的条件是,形状的中心是在另一个形状的内部还是外部,则创建这样的边:

G.add_edge('triangle', 'pentagon', relation = 'inside')
G.add_edge('triangle', 'square', relation = 'outside')
Run Code Online (Sandbox Code Playgroud)

要做到这一点,我必须通过环路节点,提取center后的形状,提取points了的 …

python iteration attributes nodes networkx

5
推荐指数
1
解决办法
7938
查看次数

python TypeError:'NoneType'对象没有属性'__getitem__'

这次我正在尝试Solem博客的另一个例子.它是一个通过使用霍夫变换检测图像中的线条和圆圈的模块.这是代码(houghlines.py):

import numpy as np
import cv2

"""
Script using OpenCV's Hough transforms for reading images of 
simple dials.
"""

# load grayscale image
im = cv2.imread("house2.jpg")
gray_im = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)

# create version to draw on and blurred version
draw_im = cv2.cvtColor(gray_im, cv2.COLOR_GRAY2BGR)
blur = cv2.GaussianBlur(gray_im, (0,0), 5)

m,n = gray_im.shape

# Hough transform for circles
circles = cv2.HoughCircles(gray_im, cv2.cv.CV_HOUGH_GRADIENT, 2, 10, np.array([]), 20, 60, m/10)[0]

# Hough transform for lines (regular and probabilistic)
edges = cv2.Canny(blur, …
Run Code Online (Sandbox Code Playgroud)

python typeerror nonetype

3
推荐指数
2
解决办法
7393
查看次数

java.lang.ClassLoader.loadClass中的错误(未知来源)

对于我的论文,我试图用图片处理一些事情,完成它的一个步骤是找到图片中的角落.经过一些冲浪,我发现它可以用Moravec的角点检测算法实现.幸运的是,我发现Moravec的算法已经由JFeatureLib在此链接上实现:https://code.google.com/p/jfeaturelib/source/browse/src/main/java/de/lmu/ifi/dbs/jfeaturelib/ pointDetector/Moravec.java R = 8d96a8fa9a43a0ec7e7084b40169be56bddd6f36

(当然我在Eclipse的构建路径中导入了从JFeatureLib给出的jar文件)所以我在项目的链接中使用了代码,并编写了一些代码来调用它.这是我创建一个Frame的代码,打开图片并在该链接上调用Moravec算法:

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;




public class Compare{
    public Compare(){
        JFrame frame = new JFrame("Find corners in picture");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = (JPanel)frame.getContentPane();
        JLabel label = new JLabel();
        label.setIcon(new ImageIcon("house.jpg"));
        panel.add(label);
        frame.setLocationRelativeTo(null);
        frame.pack();
        frame.setVisible(true);
    }
    public static void main (String[] args){
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                new Compare();
            }
        });
        Moravec picture = new Moravec();
    }
}
Run Code Online (Sandbox Code Playgroud)

关键是它在线上返回一个错误

Moravec picture = new Moravec();
Run Code Online (Sandbox Code Playgroud)

这个错误是这样的:

Exception in …
Run Code Online (Sandbox Code Playgroud)

java classloader

3
推荐指数
1
解决办法
5万
查看次数

在NetworkX中绘制图表,将绘图区域划分为3

我在Networkx中有一个图表,里面有不同的信息.图形节点如下所示:

G = nx.DiGraph()
G.add_node(shape1, level=1)
G.add_node(shape2, level=2)
G.add_node(shape3, level=2)
G.add_node(shape4, level=3)
...
Run Code Online (Sandbox Code Playgroud)

我想绘制图形,以便在图形顶部的第1级具有所有形状,第3级中的所有形状位于图形的下部,所有形状位于第2级中间.最多有3个级别.

我一直在阅读来自NetworkX的文档,但到目前为止我只使用了节点的随机定位:

pos = nx.spring_layout(G) nx.draw(G, pos).

你知道任何更聪明的方法来定位图形的节点吗?

PS:所需的输出大致如下: 在此输入图像描述

我不需要画出划分等级的线条,我只是把它们弄清楚我需要什么.

python graph draw networkx

2
推荐指数
1
解决办法
465
查看次数

Python NameError:未定义名称'harris'

如果我的某个地方有某个地方,我会提前道歉.
我是Python编程的新手,并试图从Jan Erik Solem编写的" Programming Computer Vision with Python "中计算一个例子.

以下是示例的代码(保存在名为"harris.py"的文件中):

https://github.com/jesolem/PCV/blob/master/pcv_book/harris.py

(请注意,我的代码在第70行结束)

在对此代码进行了很好的解释之后,在书中说明:"尝试运行以下命令:"

im = array(Image.open(’empire.jpg’).convert(’L’))
harrisim = harris.compute_harris_response(im)
filtered_coords = harris.get_harris_points(harrisim,6)
harris.plot_harris_points(im, filtered_coords)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题有两个:

  1. 我不知道在harris.py或单独的python文件中运行最后一行代码的位置.
  2. 在我运行它的任何文件中,显示以下错误:

    harrisim = harris.compute_harris_response(im)
    NameError: name 'harris' is not defined

我不明白为什么会出现这个错误,因为'harris'应该调用python脚本harris.py.还是我错了?

python nameerror

0
推荐指数
1
解决办法
1418
查看次数