如何将 C++ 变量传递给处理脚本?
How can I pass a C++ variable to a Processing script?
我用 C++ 编写了一个应用程序,使用 openCV 库根据对象的 HSV 值跟踪对象。应用程序获取和设置被跟踪对象的 X 和 Y 坐标,这些在参数 xPos 和 yPos 中可用。我现在必须在 Processing v3 中编写一个程序,并希望将 C++ 参数传递给 Processing,以便能够将它们传递给 ardunio,并使用它们来使用 Firmata 库来驱动伺服系统等。
任何帮助都会很棒。哪怕只是,"you can't do this".
一种方法是在您的 Processing 草图中使用 JNA or JNI。这将允许您从您的处理代码调用您的 C++ 应用程序。
这样想:不是你的 C++ 应用程序调用你的 Processing sketch,你的 Processing sketch 会调用你的 C++ 应用程序。然后,您只需在 C++ 应用程序中提供 return 您需要在 Processing sketch 中使用的值的函数。
另一种选择是在 Java 中简单地重写您的 C++ 应用程序,使用已经与 Processing 一起工作的 Java OpenCV 库之一。这可能是我会推荐的。
除了 Kevin 的回答之外,您还可以在 opencv c++ 应用程序和 Processing 之间建立套接字连接。这可以是 TCP 或 UDP。
有一个建立在 UDP 之上的很好的协议,称为 OSC,您可能想使用它并发送带有 xPos、yPos 参数的消息。
如果您只是使用 Processing 来发送一些 Arduino 消息,请考虑使用 OpenFrameworks. It's inspired by Processing, so there are a lot similarities (setup()/draw() loops, etc.) and you can use ofxCv 来满足您在 c++ 中的 OpenCV 需求。
OpenFrameworks 附带一个串行库,但也有一个基于 Firmata 的设置。有关详细信息,请参阅 ofArduino。
如果您只是想跟踪彩色物体并将它们的坐标传递给 Arduino,您可能会喜欢 Pixy cam project:
一种简单的方法是在您的 C++ 应用程序中打开一个套接字,然后将数据直接泵送至您本地环回上的 java application/script。那里有大量关于 sockets/TCP/UDP 编程的教程,所以我不会在这里讲得太具体。尽管最初设置起来有点复杂,但我建议使用 TCP 而不是 UDP。
如果您正在使用 Linux,ROS 非常擅长连接不同的模块化应用程序(尽管面向机器人技术)并为您处理所有困难的工作。它还有很多 OpenCV 模块。
共享内存空间最终会更加难以实现。
我用 C++ 编写了一个应用程序,使用 openCV 库根据对象的 HSV 值跟踪对象。应用程序获取和设置被跟踪对象的 X 和 Y 坐标,这些在参数 xPos 和 yPos 中可用。我现在必须在 Processing v3 中编写一个程序,并希望将 C++ 参数传递给 Processing,以便能够将它们传递给 ardunio,并使用它们来使用 Firmata 库来驱动伺服系统等。
任何帮助都会很棒。哪怕只是,"you can't do this".
一种方法是在您的 Processing 草图中使用 JNA or JNI。这将允许您从您的处理代码调用您的 C++ 应用程序。
这样想:不是你的 C++ 应用程序调用你的 Processing sketch,你的 Processing sketch 会调用你的 C++ 应用程序。然后,您只需在 C++ 应用程序中提供 return 您需要在 Processing sketch 中使用的值的函数。
另一种选择是在 Java 中简单地重写您的 C++ 应用程序,使用已经与 Processing 一起工作的 Java OpenCV 库之一。这可能是我会推荐的。
除了 Kevin 的回答之外,您还可以在 opencv c++ 应用程序和 Processing 之间建立套接字连接。这可以是 TCP 或 UDP。
有一个建立在 UDP 之上的很好的协议,称为 OSC,您可能想使用它并发送带有 xPos、yPos 参数的消息。
如果您只是使用 Processing 来发送一些 Arduino 消息,请考虑使用 OpenFrameworks. It's inspired by Processing, so there are a lot similarities (setup()/draw() loops, etc.) and you can use ofxCv 来满足您在 c++ 中的 OpenCV 需求。 OpenFrameworks 附带一个串行库,但也有一个基于 Firmata 的设置。有关详细信息,请参阅 ofArduino。
如果您只是想跟踪彩色物体并将它们的坐标传递给 Arduino,您可能会喜欢 Pixy cam project:
一种简单的方法是在您的 C++ 应用程序中打开一个套接字,然后将数据直接泵送至您本地环回上的 java application/script。那里有大量关于 sockets/TCP/UDP 编程的教程,所以我不会在这里讲得太具体。尽管最初设置起来有点复杂,但我建议使用 TCP 而不是 UDP。
如果您正在使用 Linux,ROS 非常擅长连接不同的模块化应用程序(尽管面向机器人技术)并为您处理所有困难的工作。它还有很多 OpenCV 模块。
共享内存空间最终会更加难以实现。