elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Ayuda con JFrame y Tratamiento de imagen JAVA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con JFrame y Tratamiento de imagen JAVA  (Leído 2,341 veces)
UnchainedGold40

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Ayuda con JFrame y Tratamiento de imagen JAVA
« en: 6 Enero 2016, 17:56 pm »

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?

Código:
    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 Desconectado

Mensajes: 401



Ver Perfil
Re: Ayuda con JFrame y Tratamiento de imagen JAVA
« Respuesta #1 en: 6 Enero 2016, 18:17 pm »

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

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
UnchainedGold40

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con JFrame y Tratamiento de imagen JAVA
« Respuesta #2 en: 6 Enero 2016, 18:38 pm »

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 Desconectado

Mensajes: 401



Ver Perfil
Re: Ayuda con JFrame y Tratamiento de imagen JAVA
« Respuesta #3 en: 6 Enero 2016, 18:43 pm »

Publica tu código  :-\
En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
UnchainedGold40

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con JFrame y Tratamiento de imagen JAVA
« Respuesta #4 en: 6 Enero 2016, 18:58 pm »

Ahí esta, solo puse el run y ActionPerformed, lo demás es declaración de variables, constructor, imports, etc.
En línea

0xFer


Desconectado Desconectado

Mensajes: 401



Ver Perfil
Re: Ayuda con JFrame y Tratamiento de imagen JAVA
« Respuesta #5 en: 7 Enero 2016, 16:33 pm »

Pues ni idea  :-( ...
En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
Chuidiang

Desconectado Desconectado

Mensajes: 161



Ver Perfil WWW
Re: Ayuda con JFrame y Tratamiento de imagen JAVA
« Respuesta #6 en: 7 Enero 2016, 23:03 pm »

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í EDT

Se bueno.
« Última modificación: 7 Enero 2016, 23:06 pm por Chuidiang » En línea

0xFer


Desconectado Desconectado

Mensajes: 401



Ver Perfil
Re: Ayuda con JFrame y Tratamiento de imagen JAVA
« Respuesta #7 en: 8 Enero 2016, 00:13 am »

Muy útil la información @Chuidiang  ;D
En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error java jframe, principiante...
Java
kitell 3 3,062 Último mensaje 11 Junio 2012, 21:48 pm
por 1mpuls0
Imagen en JFrame
Java
Shell Root 2 1,795 Último mensaje 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 3,118 Último mensaje 13 Marzo 2014, 22:13 pm
por JADP
Duda con el JFrame en Java Netbeans
Java
F.F 0 1,742 Último mensaje 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 1,214 Último mensaje 11 Diciembre 2017, 20:02 pm
por cecyt90
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines