当前位置: 首页 > 知识库问答 >
问题:

在处理中为单个草图创建多个窗口

梅庆
2023-03-14

如何在加工过程中创建单个草图的多个窗口?

实际上,我想在一个窗口中检测并跟踪特定的颜色(通过网络摄像头),并在另一个窗口中将检测到的坐标显示为一个点。到目前为止,我能够在同一个窗口中显示检测到它的点。但我想把它分成两个不同的窗口。

共有3个答案

韦棋
2023-03-14

我建议使用G4P,这是一个用于处理的GUI库,内置了一些处理多个窗口的功能。我以前用过网络摄像头,效果很好。它附带了一个GWindow对象,可以轻松生成一个窗口。网站上有一个简短的教程解释了基本知识。

我已经包含了一些旧的代码,可以向您展示基本的想法。代码中发生的事情是,我制作了两个Gwindow,并分别向它们发送一个PImage来显示:一个获得一个网络摄像头图像,另一个获得一个受影响的图像。这样做的方式是扩充GWinData对象,使其也包含希望传递给windows的数据。我没有为每个窗口制作一个特定的对象,而是制作了一个包含两个PImages的对象。每个GWindow都有自己的绘制循环(在示例底部),在该循环中,它从覆盖的GWinData对象加载PImage并显示它。在主绘制循环中,我读取网络摄像头,然后对其进行处理以创建两个图像,然后将它们存储到GWinData对象中。

希望这能给你足够的时间开始。

import guicomponents.*;
import processing.video.*;

private GWindow window;
private GWindow window2;

Capture video;

PImage sorted;
PImage imgdif; // image with pixel thresholding

MyWinData data;

void setup(){

  size(640, 480,P2D); // Change size to 320 x 240 if too slow at 640 x 480

  // Uses the default video input, see the reference if this causes an error
  video = new Capture(this, 640, 480, 24);
  numPixels = video.width * video.height;

  data = new MyWinData();

  window = new GWindow(this, "TEST", 0,0, 640,480, true, P2D);
  window.isAlwaysOnTop();
  window.addData(data);
  window.addDrawHandler(this, "Window1draw");

  window2 = new GWindow(this, "TEST", 640,0 , 640,480, true, P2D);
  window2.isAlwaysOnTop();
  window2.addData(data);
  window2.addDrawHandler(this, "Window2draw");

  loadColors("64rev.csv");
  colorlength = mycolors.length;
  distances = new float[colorlength];

  noCursor(); 
}

void draw()
{
    if (video.available()) 
    {
      background(0);
      video.read();

      image(video,0,0);
      loadPixels();

      imgdif = get(); // clones the last image drawn to the screen v1.1     
      sorted = get();
      /// Removed a lot of code here that did the processing

      // hand data to our data class to pass to other windows
      data.sortedimage = sorted;
      data.difimage = imgdif;

    }
}

class MyWinData extends GWinData {
   public PImage sortedimage; 
   public PImage difimage;

   MyWinData(){
      sortedimage = createImage(640,480,RGB); 
      difimage = createImage(640,480,RGB);
    }
}


public void Window1draw(GWinApplet a, GWinData d){
  MyWinData data = (MyWinData) d;
  a.image(data.sortedimage, 0,0);
}


public void Window2draw(GWinApplet a, GWinData d){
  MyWinData data = (MyWinData) d;
  a.image(data.difimage,0,0);
}
郭星文
2023-03-14

一个选项可能是创建一个两倍于原始窗口大小的草图,并将检测到的坐标偏移草图大小的一半。

下面是一个非常粗略的代码片段(假设blob将是检测到的颜色blob):

int camWidth = 320;
int camHeight = 240;
Capture cam;

void setup(){
  size(camWidth * 2,camHeight);
  //init cam/opencv/etc.
}
void draw(){
  //update cam and get data
  image(cam,0,0);
  //draw 
  rect(camWidth+blob.x,blob.y,blob.width,blob.height);
}

老实说,覆盖跟踪的信息可能更容易。例如,如果要进行颜色跟踪,只需显示跟踪区域边界框的轮廓即可。

如果你真的想显示另一个窗口,你可以使用JPanel。看看这个答案,看一个正在运行的代码示例。

莫欣悦
2023-03-14

你需要创建一个新的框架和一个新的PApplet。。。下面是一个草图示例:

import javax.swing.*; 
SecondApplet s;
void setup() {
  size(640, 480);
  PFrame f = new PFrame(width, height);
  frame.setTitle("first window");
  f.setTitle("second window");
  fill(0);
}
void draw() {
  background(255);
  ellipse(mouseX, mouseY, 10, 10);
  s.setGhostCursor(mouseX, mouseY);
}
public class PFrame extends JFrame {
  public PFrame(int width, int height) {
    setBounds(100, 100, width, height);
    s = new SecondApplet();
    add(s);
    s.init();
    show();
  }
}
public class SecondApplet extends PApplet {
  int ghostX, ghostY;
  public void setup() {
    background(0);
    noStroke();
  }

  public void draw() {
    background(50);
    fill(255);
    ellipse(mouseX, mouseY, 10, 10);
    fill(0);
    ellipse(ghostX, ghostY, 10, 10);
  }
  public void setGhostCursor(int ghostX, int ghostY) {
    this.ghostX = ghostX;
    this.ghostY = ghostY;
  }
}
 类似资料:
  • 问题内容: 如何在“处理”中创建单个草图的多个窗口? 实际上我想在一个窗口中检测并跟踪特定颜色(通过网络摄像头),然后将检测到的坐标显示为另一个窗口中的点,直到现在我仍可以在检测到该颜色的同一个窗口中显示这些点。我想将其拆分为两个不同的窗口。 问题答案: 您需要创建一个新框架和一个新的PApplet …这是一个示例草图:

  • 问题内容: 我想通过在“处理”中仅使用一个草图来创建两个窗口。 我想做的是,如果我在一个窗口中单击一个按钮,则某些图像会出现在另一个窗口中。 我搜索了Google并找到了一些示例。实际上,我在此“堆栈溢出网络”中发现了相同的问题。这里是链接。 在处理中 http://forum.processing.org/one/topic/multiple- windows-2-4-2011.html中 创建

  • 我目前正在研究一种数据可视化技术,它从电影中获取信息,实时播放并同时创建。为此,我想有两个独立的草图窗口。一个窗口应显示实时播放的电影,另一个窗口应显示正在进行的可视化。 我似乎不知道如何轻松地添加另一个草图窗口,并尝试了一些在处理3中不再工作的示例。 然后我偶然发现了这个例子:https://gist.github.com/atduskgreg/666e46c8408e2a33b09a 尽管我可

  • 我想通过在处理中使用一个草图来创建两个窗口。 我想做的是,如果我在一个窗口中单击一个按钮,那么一些图像就会出现在另一个窗口中。 我搜索了谷歌,找到了一些例子。实际上,我在这个“堆栈溢出网络”中发现了相同的问题。以下是链接。 在处理中为单个草图创建多个窗口http://forum.processing.org/one/topic/multiple-windows-2-4-2011.html 这是第二

  • 我试着把加工草图与多个。pde文件(标签或类)在我的网站上,但它似乎不起作用。你应该能够点击,使球出现在屏幕上反弹。然而,似乎并没有第二次出现。pde文件,因此,草图不能完全工作。 http://willhay.io/processing/一个普通的单文件草图效果很好,我认为这与这个草图有一个球有关。应该出现的球的pde类。

  • 我想在两个窗口中播放视频,只需在处理过程中使用一个草图。我还想使用串行通信。。串行通信很好,但视频不起作用。我猜程序找不到视频的位置。 我在处理中搜索了单个草图的多个窗口。我提到了这个。如何在加工过程中创建单个草图的多个窗口? 这是我写的代码。 我希望你能帮帮我拜托