Autor
|
Tema: Ayuda con JFrame y Tratamiento de imagen JAVA (Leído 3,607 veces)
|
UnchainedGold40
Desconectado
Mensajes: 4
|
Buenas! estoy trabajando con OpenCV, una librería de T.D.I., pero me tope con un problema creo yo muy fácil de resolver, solo que no se que pasa :v tengo una función en mi clase que se llama run(), esta toma la imagen de la cámara, hace el tratamiento y repinta el JFrame, y esta se manda llamar con un JButton, o sea que básicamente al pulsar el botón hace una captura de imagen, le hace el tratamiento y la pone en el frame. Todo iba bien hasta que quise hacer eso video, simplemente haciendo que el run se ejecutara n veces con un for, el problema es que al ejecutarlo, se toma la captura de imagen n veces, se hace el tratamiento n veces, pero se repinta el Frame solo una vez entonces lo que hace es lo mismo, solo imprime una imagen, pero mas lento xD entonces, no se que rayos le pasa :v algún consejo? public void run() { capture.read(imgcamara); if(!imgcamara.empty()){ System.out.println("SI entre al run");
//////////////tratamiento con OpenCV Imgproc.cvtColor(imgcamara, imagenhsv, Imgproc.COLOR_BGR2HSV); Core.inRange(imagenhsv, hsv_min, hsv_max, thresholded); Core.inRange(imagenhsv, hsv_min2, hsv_max2, thresholded2); Core.inRange(distance,hsv_min3, hsv_max3, thresholded2); Core.split(imagenhsv, lhsv); S = lhsv.get(1); V = lhsv.get(2); Core.subtract(array255, S, S); Core.subtract(array255, V, V); S.convertTo(S, CvType.CV_32F); V.convertTo(V, CvType.CV_32F); Core.magnitude(S, V, distance); Core.bitwise_and(thresholded, thresholded2, thresholded); Imgproc.GaussianBlur(thresholded, thresholded, new Size(9,9),0,0); //despiexelea Imgproc.HoughCircles(thresholded, circles, Imgproc.CV_HOUGH_GRADIENT, 2, thresholded.height()/4, 500, 50, 0, 0); rows = circles.rows(); elemSize = (int)circles.elemSize(); data2 = new float[rows * elemSize/4]; if (data2.length>0){ circles.get(0, 0, data2); for(int i=0; i<data2.length; i=i+3) { Point center= new Point(data2[i], data2[i+1]); Core.ellipse( imgcamara, center, new Size((double)data2[i+2], (double)data2[i+2]), 0, 0, 360, new Scalar( 0, 0, 0 ), 3, 0, 0 ); } } ///////////////fin del tratamiento
try { Thread.sleep(1000); } catch (InterruptedException ex) {} panel1.setimagewithMat(imgcamara); CapturaDeCamara.repaint(); System.out.println("SI repinte"); } System.out.println("SI sali del run"); } public void actionPerformed(ActionEvent event){ if(event.getSource() == iniciar){ for(int k = 0; k<10; k++){ run(); } } }
|
|
« Última modificación: 6 Enero 2016, 18:56 pm por UnchainedGold40 »
|
En línea
|
|
|
|
0xFer
Desconectado
Mensajes: 400
|
Chamaco un for se ejecuta demasiado rápido, deberías poder un retraso( Sleep) en cada iteración para que se pueda notar el efecto.
|
|
|
En línea
|
int getRandomNumber(){ return 4; //chosen by fair dice roll //guaranteed to be random }
|
|
|
UnchainedGold40
Desconectado
Mensajes: 4
|
Ya había intentado con sleep, pero aun con un retraso de 1 seg, no se repinta, solamente lo hace hasta que termina el for
|
|
|
En línea
|
|
|
|
0xFer
Desconectado
Mensajes: 400
|
Publica tu código
|
|
|
En línea
|
int getRandomNumber(){ return 4; //chosen by fair dice roll //guaranteed to be random }
|
|
|
UnchainedGold40
Desconectado
Mensajes: 4
|
Ahí esta, solo puse el run y ActionPerformed, lo demás es declaración de variables, constructor, imports, etc.
|
|
|
En línea
|
|
|
|
0xFer
Desconectado
Mensajes: 400
|
Pues ni idea ...
|
|
|
En línea
|
int getRandomNumber(){ return 4; //chosen by fair dice roll //guaranteed to be random }
|
|
|
Chuidiang
|
Hola: En java hay un hilo llamado EDT (Event Dispatch Thread) que es el encargado de atender eventos de ratón (click en botones) y de pintar ventanas. Si con un evento de ratón tardas mucho (tu método actionPerformed()), no se repintará ninguna ventana (ni nada), hasta que tu método acabe. Cuando se llama a tu actionPerformed() y llamas a run() y te lías a hacer bucles y esperas, NADA se repintara en tus ventanas hasta que terminen todos tus bucles y esperas, es decir, el efecto que dices, sólo se pinta cuando acabas. Para evitar esto, tu actionPerformed() debe lanzar un nuevo hilo para realizar todas esas operaciones que estás haciendo, de esta forma, el hilo EDT se libera inmediatamente permitiendo el repintado de ventanas mientras el hilo creado por tí trabaja con sus bucles y esperas. Más info aquí EDTSe bueno.
|
|
« Última modificación: 7 Enero 2016, 23:06 pm por Chuidiang »
|
En línea
|
|
|
|
0xFer
Desconectado
Mensajes: 400
|
Muy útil la información @Chuidiang
|
|
|
En línea
|
int getRandomNumber(){ return 4; //chosen by fair dice roll //guaranteed to be random }
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Imagen en JFrame
Java
|
Shell Root
|
2
|
2,343
|
19 Mayo 2013, 02:02 am
por YairMon
|
|
|
Ayuda - Reajustar El Tamaño De Los Componentes Internos De Un JFrame En Java?
Java
|
JADP
|
2
|
7,451
|
13 Marzo 2014, 22:13 pm
por JADP
|
|
|
Duda con el JFrame en Java Netbeans
Java
|
F.F
|
0
|
3,005
|
27 Septiembre 2014, 20:34 pm
por F.F
|
|
|
ayuda para empaquetar o generar el .exe de un buscador en JFRAME con java
Java
|
cecyt90
|
0
|
6,174
|
11 Diciembre 2017, 20:02 pm
por cecyt90
|
|
|
Ayuda para usar código, de Jframe a consola, Java Eclipse
Java
|
GERATKD
|
1
|
3,724
|
25 Abril 2023, 18:35 pm
por CronicKraze
|
|