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?
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

Código [Seleccionar]
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();
}
}
}