|
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 - alloger
1
« en: Jueves 24 de Octubre de 2013, 21:07 »
Hola, soy nuevo en este foro y veo que hay gente que pilota un monton asi que os lanzo la pregunta porque me estoy volviendo loco. Voy describiendo un poco el trabajo para poner en antecedentes...
Estoy realizando un pequeño programa de vision artificial con una WebCam y Matlab.
Despues de pelearme con la iluminacion por fin encontre la solucion con unos difusores de fotografia.
Quiero identificar figura simples (Triangulos, cuadrados y circulos) y estos son rojos o amarillos.
Para comenzar necesito identificar la forma y para ello uso regionprops para delimitar las zonas.
Una vez segmentada la imagen necesito correlacionarla con unas plantillas o imagenes patron para saber de que forma se trata.
Con los circulos no tengo problemas pero con los cuadrados y triangulos tengo el problema del giro, o sea, si la imagen adquirida no esta completamente recta la correlacion no es buena.
Asi que mi pregunta es como puedo saber cuanto es esa inclinacion para luego girarla y poder compararla con la imagen patron.
He probado con una caracteristica de regionprops que te da la inclinacion respecto al eje X pero no se realmente que inclinacion es, ya que no es la que busco.
Si alguien me aconseja en otra forma de identificar las imagenes, tambien seria estupendo.
2
« en: Lunes 6 de Agosto de 2007, 09:23 »
Hola, quisiera saber si es posible controlar el puerto USB de una forma sencilla. Estoy realizando una aplicacion con C++ Builder 6 y no se si existe un componente como el del puerto serie (comport). Salu2
3
« en: Martes 12 de Diciembre de 2006, 12:11 »
Hola, estoy realizando una presentacion en Powerpoint (Office 2000) en la cual he insertado una serie de videos. La Presentacion esta bien y funciona perfectamente. Tengo en la misma carpeta la presentacion en formato *.ppt y en *.pps y los videos usados en esta presentacion. El problema que tengo es que cuando quiero exponer la presentacion en otro PC que no es el mio los videos no se ejecutan ya sea en la presentacion *.ppt o en *.pps. Cuando los quiero modificar me dice que la ruta a seguir es la que uso en mi PC pero no me deja sustituirla por la del nuevo, ademas si en el PC que voy a realizar la exposicion no tiene instaladas las office es imposible realizar ninguna modificacion por lo que es obligatorio usar la presentacion con formato *.pps. Con las fotos no ocurre eso, se ven perfectamente. Les pido ayuda para solucionar esto, ya que si estoy realizando una presentacion y no van los videos la verdad que la presencion al igual que yo perferá credito. Un saludo y gracias
4
« en: Sábado 18 de Noviembre de 2006, 01:20 »
OK, todo perfecto. Muchas gracias por tu ayuda
Salu2
5
« en: Viernes 17 de Noviembre de 2006, 13:18 »
Vale, con este programilla lo he solucionado. El unico problema es que aunque marque la casilla de trasparente siempre obtengo como resultado un .gif con el fondo blanco.
Gracias por tu ayuda
6
« en: Viernes 17 de Noviembre de 2006, 00:45 »
Hola, estoy realizando una presentacion con powerpoint de office 2000 y solo necesito saber como crear intermitencia en un cuadro de texto y que este texto este intermitente mientras dure la diapositiva.
Un saludo y gracias
7
« en: Viernes 3 de Noviembre de 2006, 12:24 »
Ya esta todo solucionado, supongo que asi es como se aprende. Despues de darle tantas vueltas y probar tantos tipo de lectura resulta que la antena estaba dañada. Probé el sistema directamente con un cable null-modem y funciona todo correctamente realizando unas lecturas impecables. Asi que he sustituido la antena y no es tan perfecto como con el cable pero esta muy cerca. Lo siento por haberte mareado sin motivo pero a mi me ha venido genial para seguir cogiendo experiencia en c++ builder.
Un saludo y gracias por todo.
8
« en: Martes 31 de Octubre de 2006, 20:32 »
Nos vamos acercando al resultado, el porcentaje de valores buenos representados es mas alto con este nuevo codigo 6 de cada 10 datos enviados aprox. se corresponden con el resultado, pero todavia sigo sin comprender esos errores.
He colocado este codigo:
int valor = 0; bool ret =false; ret = ComPort1->Read(&valor, sizeof(valor));
Label8->Caption = ""; Label8->Caption = valor;
Yo pensaba en representar 'ret' en lugar de 'valor' pero me da errores de compilacion. Supongo que estaba equivacado. Colocando 'itoa' los resultados son similares.
En estos momentos estoy enviando (0000 1111) y en la Label me representa varios valores prodominando el 15, pero tambien valores como 248 ó 135.
9
« en: Martes 31 de Octubre de 2006, 19:28 »
Creo que voy a desistir ya de este tema.
Me quedo con este codigo:
int dato3; char string[25]; AnsiString b, dato2;
dato2=ComPort1->ReadStr(b,Count); dato2 = AnsiString((int)(b.c_str()[0])); dato3=StrToInt(dato2); ZeroMemory(string, sizeof(string)); itoa(dato3, string, 10);
Label10->Caption = ""; Label10->Caption = string;
Creo que trata la variable demasiadas veces, pero es el codigo con el cual obtengo el resultado mas proximo al deseado. Con este codigo recibo 1 valor bueno de cada 3 enviados, pero siempre se repite que de esos 2 valores erroneos son los 2 negativos, asi que la forzaré el valor con algun tipo de condicional.
Con este otro codigo:
int valor; valor = ComPort1->Read(&valor, sizeof(valor));
Label8->Caption = ""; Label8->Caption = valor;
Tambien he probado a colocar 'itoa' y el resultado obtenido siempre es el mismo, envie lo que envie solo obtengo '1' en la Label
Si se te ocurre algo mas para probar estaré agradecido si me lo comentas.
Un saludo
10
« en: Martes 31 de Octubre de 2006, 17:27 »
Probando de esta forma:
valor = ComPort1->Read(valor, &sizeof(valor));
Me esta dando error de compilacion en esa linea
- El primero me dice que no puede convertir 'int' a 'void*'. Supongo que es porque la estructura es así: Read(void *Buffer, int Count);
-El otro me dice que debo tomar la dirección de una posición de memoria
La verdad es que soy electronico y todo esto me esta empezando a superar, pero si consigo realizar esto ya tengo el proyecto terminado
11
« en: Martes 31 de Octubre de 2006, 16:33 »
Vale, entendido. Depuraré el codigo para que no sea tan extenso eliminando todo esto que me comentas.
12
« en: Martes 31 de Octubre de 2006, 16:30 »
Te refieres a intentarlo en vez de usar ReadStr(AnsiString &Str, int Count); utilizar esta otra Read(void *Buffer, int Count);
char buffer [10]; char cadena[10]; int valor; valor=ComPort1->Read(buffer,8);
itoa(valor, cadena, 10); Label10->Caption = ""; Label10->Caption = cadena;
Hasta el momento no he obtenido resultados, pero seguiré investigando con este otro metodo entoces.
Un saludo
13
« en: Martes 31 de Octubre de 2006, 15:52 »
Pero aun asi me siguen llegando datos erroneos, supongo que seran interferencias a algo similar.
14
« en: Martes 31 de Octubre de 2006, 15:29 »
Ya esta solucionado esto tambien. Con este codigo aplico la propiedad TopMost a una ventana desde C++ Builder:
void SetForegroundWindowEx(HWND hWnd) { int tThread, sThread; tThread = ::GetWindowThreadProcessId(::GetForegroundWindow(), NULL); sThread = ::GetCurrentThreadId(); ::AttachThreadInput(sThread, tThread, true); ::SetForegroundWindow(hWnd); ::AttachThreadInput(sThread, tThread, false); }
void __fastcall TForm1::Button1Click(TObject *Sender) { HWND hWindow; RECT rect; hWindow = ::FindWindow("Notepad", NULL); if(hWindow){ //::ShowWindow(hWindow, SW_RESTORE); ::GetWindowRect(hWindow, &rect); ::SetWindowPos(hWindow, HWND_TOPMOST, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_SHOWWINDOW); //SetForegroundWindowEx(hWindow); } }
Saludos
15
« en: Martes 31 de Octubre de 2006, 15:09 »
Vale, lo siento me he confundido. Lo que envio es (0001 1001) es 25 en binario. Por este motivo si se representa en ocasiones el 25 en la Label
16
« en: Martes 31 de Octubre de 2006, 14:03 »
No, no, de casualidad no es. Cuando envio por ejemplo 0x25 en la label si aparece 25, si envio 58 aparece 58 que esto era lo que queria conseguir. Lo que ocurre es que no siempre se representa el valor deseado.
El envio se realiza cada 1 segundo y unas veces se representa el deseado 25 pero otras veces se representa -58 ó -116. No se si existe alguna relacion entre el 25 y estos otros 2 numeros, pero lo que deseo es que solo aparezca 25.
Otro tema bastante improtante que he dejado al margen es que los datos son enviados al PC mediante Radio Frecuencia desde una UART externa y a lo mejor existen perturbaciones o interferencias que influyan en la emision.
Un saludo
17
« en: Martes 31 de Octubre de 2006, 12:43 »
Hasta ahora tengo esto para tratar los datos del puerto serie:
int dato3; char string[10]; AnsiString b, dato2;
ComPort1->ReadStr(b,Count); dato2 = AnsiString((int)(b.c_str()[0])); dato3=StrToInt(dato2); itoa(dato3, string, 10);
Label10->Caption = ""; Label10->Caption = string;
Con esto si que a veces me representa bien el dato ya que estoy enviando 0x25 y me representa en la Label10 el valor de 25. Lo que ocurre es que no siempre lo hace, si que en ocasiones representa 25 pero en otras el valor representado es otro. Con estas instrucciones creo que le estoy dando muchas vueltas a la variable capturada hasta obtenerla en el formato deseado.
Existe otra instruccion para la lectura del puerto COM pero no me representa bien el valor:
char buffer [10]; char cadena[10]; int valor; valor=ComPort1->Read(buffer,8); itoa(valor, cadena, 10); Label10->Caption = ""; Label10->Caption = cadena;
De esta forma aparentemente la variable no es tratada tantas veces pero el valor representado no es el esperado.
Sabe alguien (Eternal Idol) como solucionar esto?
Un saludo
18
« en: Jueves 26 de Octubre de 2006, 13:50 »
Mi aplicacion la estoy desarrollando con C++ builder 6. Pero para usar el puerto serie de una forma sencilla y con poca programacion necesiats instalar un componente comercial que no sale con el builder, se llama CPorLib y en este enlace tienes el archivo para descargar. http://comport.sourceforge.net En este otro como se usa: https://www.upv.es/bin2/caches/miw/visfit?id=328179&idioma=CDe momento no necesito usar el puerto paralelo pero si me das algun enlace que me lo explique lo guardaré por si acaso Un saludo
19
« en: Lunes 23 de Octubre de 2006, 01:03 »
Hola de nuevo. No se si me estoy excediendo pero me gustaria que me ayudases con el codigo. No soy capaz de obtener el HWND de la aplicacion que uso.
Para darle la opcion TopMost uso la funcion:
BOOL SetWindowPos( ----------, HWND_TOPMOST, 12, 12, 700, 500, SWP_SHOWWINDOW );
Pero el primer apartado de la funcion (---------) no soy capaz de obtenerlo.
Con la funcion:
HWND FindWindow(------, ------- ); Tengo problemas ya que siempre me da error de compilacion y no consigo arreglarlo.
Necesito obtener el HWND de la aplicacion notepad y de una aplicacion de captura de imagen llamada AMCAP.exe.
Un saludo y gracias
20
« en: Domingo 22 de Octubre de 2006, 06:11 »
Gracias por responder. He estado mirando la opcion de TopMost pero solo he encontrado ejemplos para que esten siempre por encima aplicaciones realizadas desde c++, o sea, aplicarlo a los formularios, pero no he encontrado nada para aplicar esta opcion desde c++ builder a una aplicacion externa como puede ser el notepad desde c++.
En estos momentos en un boton tengo esto:
String aux; ShellExecute(NULL, "open","d:\\PROYECTO FINAL\\notepad.exe", aux.c_str(), NULL, SW_SHOWNORMAL);
Asi que cada vez que hago un 'clic' en ese boton me ejecuta el notepad, es en este notepad el que quiero que este siempre por encima. Es posible esto? Si sabes seguro que si cercioramelo por favor para seguir buscando informacion. O si tu tienes que me digas mas enlaces.
Un saludo y gracias
21
« en: Martes 17 de Octubre de 2006, 23:26 »
Hola, en la aplicacion que estoy desarrollando con c++ builder ejecuto mediante un boton una aplicacion externa, abro un *.exe con el comando ShellExecute();
Cuando se ejecuta se abre en su ventana independiente a mi aplicacion pero cuando pulso algun boton de la aplicacion de c++ esta se pone como ventana principal y el *.exe se queda oculto detras como es logico. Lo que pretendo es si se puede hacer que la aplicacion externa a la mia de c++ este siempre por encima, indistintamente si estoy trabajando con una ventana o con otra. No se si se puede resolver mediante programacion o simplemente se realiza con alguna opcion desde windows.
Un saludo
22
« en: Martes 17 de Octubre de 2006, 01:56 »
Ya casi lo tengo, hasta ahora este es el codigo que empleo y funciona casi bien:
//---------------------------------------------------------------------------
void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count) {
AnsiString a, dato1; ComPort1->ReadStr(a,Count); // Leo el puerto serie cargando el valor en 'a' dato1 = AnsiString((int)(a.c_str()[0])); Label8->Caption = ""; Label8->Caption =dato1; temperatura= StrToInt(dato1); }
Lo voy a pulir un poco mas y si no lo consigo ya os preguntaré
Un saludo
23
« en: Lunes 16 de Octubre de 2006, 15:12 »
Perdona, pero me lo puedes explicar con mas detalle? Hasta ahora yo tengo esto, primero me defino la variable tipo string, luego leo el COM y lo cargo en 'a'. Antes de representarlo tego que tratar la variable 'a' de la forma que me dices pero no lo entiendo bien.
AnsiString a; ComPort1->ReadStr(a,Count); . . . . Label8->Caption =a;
Un saludo
24
« en: Lunes 16 de Octubre de 2006, 11:23 »
Gracias por contestar. No me habia dado cuenta de eso, pero la mayor duda que tengo es como tratar la variable para que represente en este caso entonces 37 en decimal. Me has comentado que si envio 0010 0101 equivale a 37 decimal, estoy de acuerdo, pero si tengo en la variable capturada por el puerto serie el valor 37 decimal como la trato para que cuando la represente en la Label me aparezca el propio 37 y no aparezca el simbolo %. La aplicacion que estoy realizando se basa en enviar desde un micro el valor capturado por el conversor analogico/digital de la temperatura, si el micro envia 37 tengo que representar 37. Un saludo y gracias de nuevo
25
« en: Lunes 16 de Octubre de 2006, 01:54 »
Hola, estoy realizando una aplicacion con el puerto serie. Desde un módulo externo envio por radiofrecuencia a traves de una UART un dato en binario. Este dato por ejemplo es 0010 0101 (el nº25) y lo quiero representar en una Label. Si yo he enviado 25, tengo que representar 25 pero me representa caracteres del codigo ASCII. Para capturar por el puerto serie estoy usando el componente CPortLib y este es el codigo con el que leo el puerto:
AnsiString a; // Declaro una variable ComPort1->ReadStr(a,Count); // Leo el puerto serie cargandose el valor en 'a' Label8->Caption = a; // Represento el valor leido del puerto en la Label8
Creo que como la variable 'a' es de tipo String se representa como un caracter, pero no se como tratarla para que aparezcan 2 caracteres que formen 25 y se represente el valor que he enviado desde el exterior.
Un saludo y gracias
|
|
|