A biblioteca http://ubaa.net/shared/processing/opencv permite utilizar o OpenCV juntamente com o Processing. Embora não implemente todos os recursos do OpenCV, a grande vantagem desta biblioteca é utilizar o Processing. Um dos problemas que ocorrem, em especial no MacOSX SnowLeopard é quando se utiliza o Processing e o OpenCV no NetBeans. Neste post, apresentamos a solução.
Considere o código exemplo para o OpenCV + Processing:
import processing.core.*;
import hypermedia.video.OpenCV;
public class OpenCV_PApplet extends PApplet {
OpenCV cv = null; // OpenCV object
// Initialise Objects
@Override
public void setup() {
size( 640, 480 ); // set frame size
cv = new OpenCV( this ); // link OpenCV process to this PApplet
cv.capture( width, height ); // start video stream
}
// Display the input camera stream in frame
@Override
public void draw() {
cv.read();
image( cv.image(), 0, 0 );
}
// Call the PApplet main method
public static void main( String[] args ) {
PApplet.main( new String[]{"OpenCV_PApplet"} );
}
}
Supondo que as bibliocas core.jar e OpenCV.jar estejam devidamente ligadas ao projeto do NetBeans, ao tentar compilar deve surgir a seguinte mensagem de erro:
!!! required library not found : no OpenCV in java.library.path
Verify that the java.library.path property is correctly set and the opencv.framework exists in '/Library/Frameworks' folder
Exception in thread "Animation Thread" java.lang.UnsatisfiedLinkError: hypermedia.video.OpenCV.capture(III)V
at hypermedia.video.OpenCV.capture(Native Method)
at hypermedia.video.OpenCV.capture(OpenCV.java:945)
at OpenCV_PApplet.setup(OpenCV_PApplet.java:17)
at processing.core.PApplet.handleDraw(PApplet.java:1571)
at processing.core.PApplet.run(PApplet.java:1496)
at java.lang.Thread.run(Thread.java:637)
Mesmo o OpenCV instalado corretamente e o mesmo código executando corretamente no Processing isto ocorre. Duas são as razões: (a) falta da biblioteca libOpenCV.jnilib e (b) Esta versão do OpenCV não funciona em 64bits e necessita da JVM rodando em 32bits.
Vamos a solução dos problemas:
a) A biblioteca libOpenCV.jnilib deve ser acessada pelo programa Java. Para tanto temos duas opções, colocar a biblioteca na mesma pasta do programa compilado, ou ainda copiá-la para a pasta biblioteca de extensão do JVM. A segunda opção é bem interessante, pois permite compartilhar a biblioteca com vários programas. A pasta está localizada em /Library/Java/Extensions.
b) Para configurar a JVM para executar em 32bits, usar a diretiva -d32. No shell isto pode ser feito usando java -d32 meuprograma e para rodar diretamente do Netbeans, acesse as propriedades do projeto e selecione Run, no campo VM options, coloque -d32.
Pronto, agora o programa deverá compilar e executar corretamente.
16 de jun. de 2010
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário