• Martes 14 de Enero de 2025, 02:45

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Geo

Páginas: 1 ... 5 6 [7] 8 9 ... 41
151
Visual Basic 6.0 e inferiores / Re: Procesar frames con AVICap
« en: Viernes 27 de Marzo de 2009, 07:00 »
Ya lo conseguí, aunque ahora tengo problemas con el manejo de memoria dentro de la función callback, a ver si puedo con esto :).

152
Visual Basic 6.0 e inferiores / Procesar frames con AVICap
« en: Martes 24 de Marzo de 2009, 07:53 »
Qué tal amigos, estoy realizando una aplicación de procesamiento de video, para ello estoy utilizando AVICap. De hecho, ya he realizado lo que intento hacer, con C (sin AVICap) y con VB.NET, sin embargo, por motivos didáctivos me han pedido lo implemente también en VB 6 :p.

El problema es que de VB no conozco demasiado, y tengo problemas para poder configurar la función "callback" que se ejecutará al momento de que la cámara se actualiza con el siguiente frame. En VB.NET lo estoy haciendo así (lo tomé de otro código que encontré):

Módulo:
Código: Visual Basic
  1.     Delegate Function CallBackDelegate(ByVal hwnd As IntPtr, ByRef lpVhdr As VIDEOHDR) As IntPtr
  2.     Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As CallBackDelegate) As IntPtr
  3.  
  4.     Public Structure VIDEOHDR
  5.         Dim lpData As Integer '// address of video buffer
  6.         Dim dwBufferLength As Integer '// size, in bytes, of the Data buffer
  7.         Dim dwBytesUsed As Integer '// see below
  8.         Dim dwTimeCaptured As Integer '// see below
  9.         Dim dwUser As Integer '// user-specific data
  10.         Dim dwFlags As Integer '// see below
  11.         <VBFixedArray(3)> Dim dwReserved() As Integer '// reserved; do notuse}
  12.     End Structure
  13.  

Clase del form principal:
Código: Visual Basic
  1. Public Class frmCaptura
  2.     Dim hwdc As Integer
  3.     Dim conectado As Boolean
  4.     Dim g As Graphics
  5.     Private delCallBack As CallBackDelegate = New CallBackDelegate(AddressOf procesaFrame)
  6.  
  7.  
  8.     Private Sub btnIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIniciar.Click
  9.         Dim res As Integer
  10.  
  11.         hwdc = capCreateCaptureWindow("Captura Cámara", WS_CHILD Or WS_VISIBLE, 0, 0, 320, 240, picCaptura.Handle.ToInt32, 0)
  12.         If (hwdc <> 0) Then
  13.             res = SendMessage(hwdc, WM_CAP_DRIVER_CONNECT, 0, 0)
  14.             res = SendMessage(hwdc, WM_CAP_SET_PREVIEW, 1, 0)
  15.             res = SendMessage(hwdc, WM_CAP_SET_PREVIEWRATE, 60, 0)
  16.             conectado = True
  17.             ' Configura callback
  18.             res = SendMessage(hwdc, WM_CAP_SET_CALLBACK_FRAME, New IntPtr(0), delCallBack)
  19.         Else
  20.             MsgBox("No se encontró dispositivo de captura")
  21.         End If
  22.  
  23.     End Sub
  24. ...
  25.  
  26.     Private Function procesaFrame(ByVal hwnd As IntPtr, ByRef lpVHdr As VIDEOHDR) As IntPtr
  27.     ...
  28.     End Function
  29.  
  30.  

¿Alguien sabría cómo hacerlo en VB 6? De hecho, ya tengo un avance, pero me gustaría saber si alguien ya lo ha hecho y que pudiera echarme una mano :). Por el momento ya los estoy convenciendo de trabajar con .NET (con VB o C#, que lo manejo mejor), ya que con C/C++ por el momento nop (este si lo domino :p).

Gracias.

153
Matlab / Re: taylor-symsum
« en: Miércoles 4 de Marzo de 2009, 06:15 »
Es extraño, si el archivo está en la misma carpeta no debiera haber problemas, para asegurarme probé con una llamada más sencilla:

factorial.m
Código: Matlab M
  1. function[ res ] = nombrefun( num )
  2. res = 1;
  3. for cont = 1 : num
  4.     res = res * cont;
  5. end
  6.  

prueba.m
Código: Matlab M
  1. numero = 5;
  2. fac = factorial( 5 )
  3.  

Resultado:
Citar
fac =
 
   120
 
>>

154
C/C++ / Re: Necesito consejos, gracias.
« en: Martes 3 de Marzo de 2009, 06:35 »
Por favor utiliza las etiquetas [code] para escribir código.

El código que has mostrado tiene varios errores, pero no son complicados, muchos son de concepto:
  • el número mayor no se calcula haciendo sumas,
  • para el número con mayor frecuencia ya te lo resolvieron (hay otras formas),
  • si vas a calcular 50 números de Fibonacci, sería bueno que tu ciclo for contara 50 números ¿no?
  • puedes calcular primero los números y luego pedir al usuario que ingrese el que evaluarás,
  • en un vector de 50 posiciones guardas los números de la serie de Fibonacci, el usuario ingresa un número, recorres el vector buscándolo, si llegas al final y no lo encontraste, el número ingresado no corresponde a uno de los 50 primeros números de la serie.
Recomendación: intenta un poco más para resolverlos, pregunta por dudas un tanto más específicas, aquí no se hacen tareas (o no se deberían hacer).

155
Matlab / Re: taylor-symsum
« en: Martes 3 de Marzo de 2009, 05:56 »
No detallas muy bien tu problema, no mencionas si la función factorial que hiciste, está en un archivo separado o en el principal como una subfunción.
Si está en un archivo separado, tu archivo principal debiera estar en la misma carpeta para que lo reconozca. Además, la función que llamas debiera corresponder con el nombre del archivo, puesto que es este el que determina el nombre de la función.

156
Matlab / Re: imagesc
« en: Jueves 26 de Febrero de 2009, 06:17 »
Mejor detalla un poco mejor lo que deseas hacer, y qué problemas te has encontrado :).

157
Matlab / Re: imagesc
« en: Martes 24 de Febrero de 2009, 23:40 »
Las imágenes se cargan con la función imread.
En el caso del ejemplo, se utiliza load porque carga los datos desde un archivo en formato MATLAB que contiene las variables adecuadas.

Código: Text
  1.  
  2. X = imread( 'imagenes/imagen.tif' );
  3.  
  4.  

158
Matlab / Re: Pegar archivos .txt en otro
« en: Domingo 22 de Febrero de 2009, 22:25 »
No entiendo muy bien, ya que no comentas el contenido de los archivos. Si fuera simplemente concatenar los dos archivos, cargas el contenido de ambos, y luego creas uno donde unas ambos contenidos.

¿Qué contienen los archivos? ¿Cómo los cargas?

159
C/C++ / Re: Graficos en C (dev-C)
« en: Domingo 22 de Febrero de 2009, 20:21 »
El juego que hiciste, ¿está hecho solamente con funciones de consola?
Si es así, una biblioteca gráfica sería un cambio importante, puedes intentar antes con ncurses, que es una biblioteca para interfaces basadas en texto.

160
Matlab / Re: convertir valor d 1 pixel d una imagen d 256 colors a 16bits
« en: Domingo 22 de Febrero de 2009, 07:34 »
¿Podrías aclarar un poco?
¿Tienes imágenes a color de 16 bits? Es decir, un pixel de la imagen se representa por 16 bits ¿o se trata de imágenes a color en las que cada componente de sus pixeles se representa con enteros de 16 bits?

Si se trata de lo segundo, y convertiste de 16 bits a 8, para reescalar en sentido inverso usa una regla de tres:

2^16 - 2^8
   x   - uint8

donde x = ( uint8 * 2^16 ) / 2^8

161
Matlab / Re: Comparación De Imágenes En Matlab
« en: Domingo 22 de Febrero de 2009, 07:19 »
La función imshow es parte del toolbox de procesamiento de imágenes, comprueba que lo tengas instalado.

162
Matlab / Re: TOMA Y ALMACENAMIENTO DE IMAGENES
« en: Domingo 22 de Febrero de 2009, 07:13 »
Cita de: "OUT-INT FAVIAN"
Mi duda es como puedo tomar la imagen cada segundo hasta llegar a un tiempo de 15 minutos y almacenar la imagen que toma, PARa su correspondiente procesamiento. :good:
Utiliza una función 'callback' de tipo temporizador.

163
Matlab / Re: Adquisicion de imagen con matlab 7
« en: Domingo 22 de Febrero de 2009, 06:52 »
El problema es el formato en que creas el objeto de video.
En lugar de 'YUY2_...', prueba con 'RGB24_...' y verás.

164
Matlab / Re: Crear directorios Matlab
« en: Domingo 22 de Febrero de 2009, 06:35 »
Con la función isdir podrías saber si hay un directorio con el nombre que especifiques. Luego lo creas con mkdir.

También, podrías usar solamente mkdir, la cual también es capaz de indicar si el directorio ya existía.

165
Matlab / Re: duda basica
« en: Viernes 30 de Enero de 2009, 00:50 »
¿Podrías colocar el código que estás utilizando?

166
Matlab / Re: Entrada de fichero
« en: Jueves 29 de Enero de 2009, 22:55 »
Para comparar cadenas de texto se debe utilizar la función strcmp o strcmpi, la primera distingue entre mayúsculas y la segunda no. Estas funciones comparan dos cadenas de texto y devuelven 1 en el caso de que sean iguales, 0 si no.
Usarías algo como esto:

Código: Text
  1.  
  2. esperado = 'archivo.txt';
  3. recibido = '';
  4.  
  5. while ( strcmpi( esperado, recibido ) ~= 1 )
  6.     recibido = input( 'Introduzca nombre de archivo: ', 's' );
  7. end
  8.  
  9.  
Si deseas mostrar un error si el archivo no corresponde, podrías hacerlo así:

Código: Text
  1.  
  2. esperado = 'archivo.txt';
  3. recibido = input( 'Introduzca nombre de archivo: ', 's' );
  4.  
  5. while ( strcmpi( esperado, recibido ) ~= 1 )
  6.     recibido = input( 'Error en nombre de archivo, introduzca de nuevo: ', 's' );
  7. end
  8.  
  9.  

No entendí muy bien si deseas restringir el nombre del archivo o si deseas evitar que se introduzca uno que no existe :p.

Suerte :).

167
OpenGL / Re: Dibujado se sobrepone al anterior
« en: Jueves 15 de Enero de 2009, 23:20 »
Pero MESA ¿no era una implementación software?
Perdón, ya leí en la introducción de la página oficial:
Citar
A variety of device drivers allows Mesa to be used in many different environments ranging from software emulation to complete hardware acceleration for modern GPUs.

168
OpenGL / Re: Dibujado se sobrepone al anterior
« en: Jueves 15 de Enero de 2009, 19:34 »
Blackwind, gracias por el consejo :). De hecho, mi proyecto lo estoy desarrollando en Windows, solo tratando de utilizar en su mayoría librerías que también estén disponibles en Linux para hacer más sencilla una futura portación :).

169
OpenGL / Re: Dibujado se sobrepone al anterior
« en: Martes 13 de Enero de 2009, 08:03 »
Idi**a de mi, ahora mismo que probé en linux encontré el error :brickwall:.
Efectivamente, no estaba borrando :brickwall:. eso me pasa por creer ciegamente que el código estaba intacto desde la última vez que lo había visto funcionar :p.

su, muchas gracias por la ayuda, y también por la recomendación, cuando estaba por comprarme un libro para empezar a echarle un vistazo a OpenGL me decidí por el de la Superbiblia porque el que comentas lo tiene mi asesor, y se supone que me lo prestaría :P (mañana mismo se lo pido ;)).

Gracias :).

170
OpenGL / Dibujado se sobrepone al anterior
« en: Martes 13 de Enero de 2009, 01:07 »
Qué tal, recién le estoy echando un vistazo a OpenGL, estoy checando unos ejemplos de la Superbiblia :).

Tengo un problema, el siguiente código:

Código: Text
  1.  
  2. // Points.c
  3. // OpenGL SuperBible
  4. // Demonstrates OpenGL Primative GL_POINTS
  5. // Program by Richard S. Wright Jr.
  6.  
  7. #include "../../shared/gltools.h"   // OpenGL toolkit
  8. #include <math.h>
  9. #include <cstdio>
  10.  
  11.  
  12. // Define a constant for the value of PI
  13. #define GL_PI 3.1415f
  14.  
  15. // Rotation amounts
  16. static GLfloat xRot = 0.0f;
  17. static GLfloat yRot = 0.0f;
  18.  
  19.  
  20. // Called to draw scene
  21. void RenderScene(void)
  22.     {
  23.     GLfloat x,y,z,angle; // Storeage for coordinat
  24.     // Save matrix state and do the rotation
  25.     glPushMatrix();
  26.     glRotatef(xRot, 1.0f, 0.0f, 0.0f);
  27.     glRotatef(yRot, 0.0f, 1.0f, 0.0f);
  28.  
  29.     // Call only once for all remaining points
  30.     glBegin(GL_POINTS);
  31.  
  32.     z = -50.0f;
  33.     for(angle = 0.0f; angle <= (2.0f*GL_PI)*3.0f; angle += 0.1f)
  34.     {
  35.         x = 50.0f*sin(angle);
  36.         y = 50.0f*cos(angle);
  37.    
  38.         // Specify the point and move the Z value up a little  
  39.         glVertex3f(x, y, z);
  40.         z += 0.5f;
  41.     }
  42.  
  43.     // Done drawing points
  44.     glEnd();
  45.  
  46.     // Restore transformations
  47.     glPopMatrix();
  48.  
  49.     // Flush drawing commands
  50.     glutSwapBuffers();
  51.     }
  52.  
  53. // This function does any needed initialization on the rendering
  54. // context.
  55. void SetupRC()
  56.     {
  57.     // Black background
  58.     glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
  59.  
  60.     // Set drawing color to green
  61.     glColor3f(0.0f, 1.0f, 0.0f);
  62.     }
  63.  
  64. void SpecialKeys(int key, int x, int y)
  65.     {
  66.     if(key == GLUT_KEY_UP)
  67.         xRot-= 5.0f;
  68.  
  69.     if(key == GLUT_KEY_DOWN)
  70.         xRot += 5.0f;
  71.  
  72.     if(key == GLUT_KEY_LEFT)
  73.         yRot -= 5.0f;
  74.  
  75.     if(key == GLUT_KEY_RIGHT)
  76.         yRot += 5.0f;
  77.  
  78.     if(key > 356.0f)
  79.         xRot = 0.0f;
  80.  
  81.     if(key < -1.0f)
  82.         xRot = 355.0f;
  83.  
  84.     if(key > 356.0f)
  85.         yRot = 0.0f;
  86.  
  87.     if(key < -1.0f)
  88.         yRot = 355.0f;
  89.  
  90.     // Refresh the Window
  91.     glutPostRedisplay();
  92.     }
  93.  
  94.  
  95. void ChangeSize(int w, int h)
  96.     {
  97.     GLfloat nRange = 1000.0f;
  98.  
  99.     // Prevent a divide by zero
  100.     if(h == 0)
  101.         h = 1;
  102.  
  103.     // Set Viewport to window dimensions
  104.     glViewport(0, 0, w, h);
  105.  
  106.     // Reset projection matrix stack
  107.     glMatrixMode(GL_PROJECTION);
  108.     glLoadIdentity();
  109.  
  110.     // Establish clipping volume (left, right, bottom, top, near, far)
  111.     if (w <= h)
  112.         glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange);
  113.     else
  114.         glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);
  115.  
  116.     // Reset Model view matrix stack
  117.     glMatrixMode(GL_MODELVIEW);
  118.     glLoadIdentity();
  119.     }
  120.  
  121. int main(int argc, char* argv[])
  122.     {
  123.     glutInit(&argc, argv);
  124.     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  125.     glutCreateWindow("Points Example");
  126.     glutReshapeFunc(ChangeSize);
  127.     glutSpecialFunc(SpecialKeys);
  128.     glutDisplayFunc(RenderScene);
  129.     SetupRC();
  130.     glutMainLoop();
  131.  
  132.     return 0;
  133.     }
  134.  
  135.  
Dibuja unos puntos en espiral y permite mover la perspectiva con las flechas del teclado, lo probé hace algunas semanas, y funcionaba muy bien, pero hoy intento de nuevo y ahora al intentar mover, el dibujo anterior no se borra, sino que las nuevas posiciones se van sobreponiendo a las anteriores, quedando todo encimado tras intentar mover varias veces.

¿Alguien sabe si es posible modificar esto en código? Porque por ahora mi única idea es algo con drivers o versión de alguna librería, acabo de instalar la última versión de DirectX pero no sé si tenga algo que ver con esto.

Gracias de antemano por cualquier ayuda que puedan darme :).

171
Microcontroladores / Re: Puerto serie RS232 sustituirlo por USB
« en: Domingo 4 de Enero de 2009, 01:17 »
1) No.
2) Hay que programarlo.

Esta es la lista de PICs que tienen controlador USB integrado:
http://www.microchip.com/stellent/idcpl ... odeId=2654
Todo lo relacionado con USB de Microchip lo encuentras en: http://www.microchip.com/usb/
Si tienes otro microcontrolador (PIC o cualquier otro), puedes usar un controlador USB externo como el USBN9603 de National o el FT232.

Para programar los PICs, no he visto hasta ahora código en ensamblador, gralmente. encuentras ejemplos y documentación en lenguaje C o Basic, el manejo del controlador USB se encapsula mediante el uso de librerías en estos lenguajes. Yo he probado con el compilador C de CCS: http://www.ccsinfo.com
Por el lado de la aplicación en la PC, Microchip provee documentación y ejemplos para distintos modos de comunicación, incluyendo clases HID (dispositivos de interfaz humana); CDC, dispositivo de comunicación, esta clase permite trabajar el puerto USB como un puerto serie virtual (COM), y una librería para transferencias bulk.

El protocolo USB define varios tipos de transferencia (comunicación) de datos, debes checar cuál es el que se adecua a tus necesidades :). Para esto te recomiendo el libro "USB Complete" de Jan Axelson: http://www.lvr.com/

Por último, te dejo un ejemplo de aplicación con un PIC18f2550 en modo de transferencias bulk, firmware compilado con CCS y la aplicación de la PC desarrollada en C# utilizando la librería de Microchip:
http://www.hobbypic.com/index.php?optio ... &Itemid=27

172
C/C++ / Re: Graficos
« en: Domingo 14 de Diciembre de 2008, 19:11 »
¿No funcionan los colores?
Prueba usando varios valores de constantes: http://c.conclase.net/Borland/macro.php?mac=bcolores

Si no, prueba el código al final de esta página:
http://www.chuidiang.com/chuwiki/index. ... graphics.h

Suerte.

173
Matlab / Re: precesar imagen.....
« en: Domingo 14 de Diciembre de 2008, 19:01 »
Qué bien que ya casi lo tienes :).

Un solo apunte: para futuros trabajos podrías trabajar sólo con una foto, no directamente con video. De esta forma podrías manejar una imagen en donde coloques objetos de diferentes tonalidades o colores y evalúes el rendimiento, una vez que te convence el resultado trabajas con el video, sabiendo que tu algoritmo/procesamiento funciona :).

Nos vemos y te tomo la palabra, que para eso estamos aquí, para compartir :). ¡Salud! :beer:

174
C/C++ / Re: Graficos
« en: Sábado 13 de Diciembre de 2008, 02:34 »
Primero comentar la opinión que algunos compañeros tienen con respecto al compilador que estás usando: es viejo y sus bibliotecas/librerías no son estándar.

Ahora, no quiere decir que no sirva, si tú puedes hacer lo que quieres con él está muy bien :). Sobre poner color, se hace con la función setcolor, para rellenar, en lugar de dibujar con líneas lo puedes hacer mediante polígonos con fillpoly, si no quieres rellenar usa drawpoly, estas y todas las funciones de la biblioteca graphics de Borland las puedes encontrar con ejemplos y documentación en esta página:

http://c.conclase.net/Borland/libreria.php?lib=graphics

Por último, sobre lo que apuntaba al principio, conviene que pronto pruebes otros compiladores, como VC++ si trabajas en Windows, donde lamentablemente no existen las librerías de Borland para gráficos (graphics), en su lugar tendrás que utilizar alguna otra, entre las cuales están GDI, OpenGL, Allegro, SDL, DirectX...

Suerte :).

175
C/C++ / Re: Graficos
« en: Viernes 12 de Diciembre de 2008, 06:12 »
¿Qué biblioteca usas para dibujar? Podrías colocar el código del dibujo que hiciste para entender mejor por dónde vas encaminado :).

Páginas: 1 ... 5 6 [7] 8 9 ... 41