Я работаю над обработкой карт контура с карт высот с помощью blobDetection library. Моя конечная цель - лазерная резка капель, чтобы сделать вид архитектурных ландшафтных макетов.Идентификация конкретных блоков в обработке
В настоящее время я могу получить контуры и экспортировать контурную карту как SVG, который является большим, но я хочу, чтобы иметь возможность идентифицировать каждую каплю (или контур, или кольцо) и затем иметь возможность манипулировать каждый контур по отдельности. А именно, я хочу переместить их в окно, чтобы они не были на вершине друг друга и не перекрывались. Я также хочу назначить координаты каждому отдельному блобу, чтобы было легко узнать, где каждый капля идет, когда он был лазерным.
Вот код (из примера, приведенного автором V3Ga):
import processing.svg.*;
import blobDetection.*;
import peasy.*;
import processing.pdf.*;
PeasyCam cam;
PImage img;
float levels = 10;
float factor = 10;
float elevation = 125;
float colorStart = 0;
float colorRange = 160;
BlobDetection[] contours = new BlobDetection[int(levels)];
boolean recording = false;
void keyPressed(){
if (key == 'r' || key == 'R'){
recording = !recording;
}
}
void setup() {
size(1000,800,P3D);
surface.setResizable(true);
img = loadImage("map1.gif");
surface.setSize(img.width, img.height);
cam = new PeasyCam(this, img.width, img.height, 0, 500);
colorMode(HSB, 360, 100, 100);
for (int i=0; i<levels; i++){
contours[i] = new BlobDetection(img.width, img.height);
contours[i].setThreshold(i/levels);
contours[i].computeBlobs(img.pixels);
}
}
void draw(){
if (recording){
beginRecord(SVG, "frame_####.svg");
}
for (int i=0; i<levels; i++){
drawContours(i);
}
if (recording) {
endRecord();
recording = false;
}
}
void drawContours(int i) {
Blob b;
EdgeVertex eA,eB;
for (int n=0 ; n<contours[i].getBlobNb() ; n++) {
b=contours[i].getBlob(n);
if (b!=null) {
stroke(250,75,90);
for (int m=0;m<b.getEdgeNb();m++) {
eA = b.getEdgeVertexA(m);
eB = b.getEdgeVertexB(m);
if (eA !=null && eB !=null)
line(
eA.x*img.width, eA.y*img.height,
eB.x*img.width, eB.y*img.height
);
}
}
}
}
После тестирования несколько вещей, которые я думаю, что лучше всего, чтобы создать и массив объектов, которые содержат информацию для каждого сгустка (х и y, уровень) и заполнить этот массив методом drawContours. Однако у меня много проблем с получением правильной информации для хранения в этом массиве.
Так что мои вопросы:
- Как определить х, у координаты сложных форм, таких, как эти сгустки
- Как переставить сгустки когда у меня есть свой инфо-магазин в массиве
Любое предложение, даже используя другие методы (т. Е. Не обрабатывать), будет с благодарностью оценено.
You хотите, чтобы их уложили в 3D? Объект blob имеет свойства x и y, к которым вы можете получить доступ, и я бы предположил, что уровень будет просто равен индексу blob в массиве. –