2016-03-17 6 views
1

У меня есть сетка в СТЛ файл (https://dl.dropboxusercontent.com/u/710615/stlMidpoint.stl)OpenCV питона треугольные сетки, имеющие координаты

С помощью этого кода:

from stl import mesh 
import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
import cv2 

def unique(a): 
    order = np.lexsort(a.T) 
    a = a[order] 
    diff = np.diff(a, axis=0) 
    ui = np.ones(len(a), 'bool') 
    ui[1:] = (diff != 0).any(axis=1) 

    return a[ui] 

A = np.loadtxt("vectors.txt") 
A = A[np.logical_not(A[:,2] > 0)] 
uniqA = unique(A) 
coordA = A[:,0:2] 

Я могу получить координаты которых есть соответствие (я думаю) к точкам поверхности треугольников. Я пытаюсь нарисовать треугольники без успеха. Точки есть, но не в формате треугольников. Я использую polines:

img= cv2.imread('nimg.jpg') 
imgMask = np.ones(img.shape[:2], dtype="uint8")*255 
m_xor= np.ones(imgMask.shape, dtype="uint8") * 255 

points = np.array(uniqA[:,0:2], np.int32) 
print points 
cv2.polylines(m_xor,[points], 1, (0,0,0)) 
cv2.imwrite('result.jpg', m_xor) 

vectors.txt: https://dl.dropboxusercontent.com/u/710615/vectors.txt

nimg: https://dl.dropboxusercontent.com/u/710615/nimg.jpg

ответ

2

Использование Numpy-СТЛ (https://github.com/WoLpH/numpy-stl) Я могу открыть, прочитать и сделать файл легко:

from stl import mesh 
from matplotlib import collections 
from matplotlib import pyplot 

# Create a figure and axes 
figure, axes = pyplot.subplots() 

# Read the STL file 
your_mesh = mesh.Mesh.from_file('stlMidPoint.stl') 

# Scale the image to the STL dimensions 
axes.set_xlim(your_mesh.min_[0], your_mesh.max_[0]) 
axes.set_ylim(your_mesh.min_[1], your_mesh.max_[1]) 

# Add the polygons, but only the X and Y axis since it's 2D 
axes.add_collection(collections.PolyCollection(your_mesh.vectors[:, :, :2])) 

# Make sure the aspect ratio stays correct 
pyplot.gca().set_aspect('equal') 

# Render! 
pyplot.show() 

Огромные размеры делают его действительно медленным.

enter image description here

+0

Как экспортировать в Numpy вектор и overtlay в других изображениях? Например, как я могу применить эту сетку на этом изображении https://dl.dropboxusercontent.com/u/710615/La1.png , например. Извлечение массива numpy с использованием matplotlib Я получу точки, а не треугольники. – marco

+0

Вы можете использовать 'figure.savefig ('image.png', dpi = ...)' для хранения изображения в качестве изображения с высоким разрешением. Или используйте 'fig.canvas' для прямого доступа к данным. Фактически вектор уже доступен с помощью 'your_mesh.vectors [:,:,: 2]' – Wolph

+0

Знаете ли вы способ рисования в другом контексте, отличном от matplotlib? – marco

 Смежные вопросы

  • Нет связанных вопросов^_^