Cómo usar DirectShow para crear un programa de captura de cámara en MFC
Si desea realizar procesamiento de imágenes, se recomienda usar opencv (para obtener más detalles, consulte los Ejemplos 3-6 en Tutorial básico de opencv de Yu Shiqi, con ligeras modificaciones, se estima que se puede usar en su proyecto): Yu Shiqi, Ejemplos 3-6 en el tutorial básico de opencv, con ligeras modificaciones, se estima que se puede usar en su proyecto)
Lo he compilado a continuación. Un pequeño proyecto: si tiene alguna pregunta, envíe un correo electrónico: zhoutingzhi@gmail.com
Para las operaciones de preparación de opencv, debe leerlo. reserve y visite el sitio web chino de opencv
Si tiene alguna pregunta, puede discutirla conmigo (también soy un novato, acabo de resolver este problema y estoy muy feliz).
1. Cree un nuevo proyecto de diálogo mfc, agregue un control de imagen en él y no realice ningún cambio excepto el ID.
2. Agregue el archivo de encabezado del cuadro de diálogo (excluidos los archivos Dlg) (preferiblemente después de "#include "resource.h" // símbolos principales "):
# include "cxcore. h"
#include "cvcam.h"
#include "windows.h"
#include "cv.h" p>
#include " highgui.h"
3. En Proyecto -> Configuración -> Seleccionar todas las configuraciones -> Enlace -> Objetos/Módulos de biblioteca -> Agregar:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cxcore.lib cv.lib ml.lib cvaux.lib highgui .lib cvcam. lib
4. Agregue el siguiente contenido donde se debe activar la visualización de la cámara:
void CVideomfcDlg::OnButton1()
{
// TODO: agregue aquí el código del controlador de notificaciones de control
int ncams = cvcamGetCamerasCount( );//devuelve el número de cámaras a las que se puede acceder
HWND MyWin=:: GetDlgItem(m_hWnd,IDC_VIDEO); //obtiene el identificador del control (IDC_VIDEO es el control de imagen)
cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE //Selecciona la primera cámara
<); p>int ancho=240;int alto=240;
cvcamSetProperty(0,CVCAM_PROP_WINDOW, &MyWin); );
cvcamSetProperty(0,CVCAM_ RNDHEIGHT, &height); Seleccione una ventana
cvcamSetProperty(0,CVCAM_PROP_CALLBACK, callback1); la función procesará cada cuadro
cvcamInit( );
cvcamStart(
} 5.
5. Para cambiar el tamaño de la secuencia de imágenes mostrada, agregue el siguiente código después de configurar las propiedades de la ventana:
int width=320; //este es el tamaño de la ventana que debe mostrarse
int height=240; //selecciona según tus propias necesidades
cvcamSetProperty(0,CVCAM_RNDWIDTH, &width
);
cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);
6. Función miembro (tenga en cuenta que cuando agregue una función, asegúrese de seleccionar estática; de lo contrario, estará muy deprimido; de todos modos, estuve deprimido durante dos semanas)
void CVideomfcDlg::callback1(IplImage *image)
p>
{
IplImage* imagen1 = imagen
int i,j
afirmar (imagen); /p>
// Obtener la hora actual del sistema
SYSTEMTIME st2=;
GetLocalTime(&st2); //Esto se usa para almacenar el nombre de la imagen a guardar, de forma tonta, definiéndola primero y luego modificando el valor del array en ella.
sss[7]=st2.wHour/ 148; //Obtener la hora actual del sistema
sss[8]=st2.wHour%148
sss[9]=st2.wMinute/10; +48; //Obtener la hora actual del sistemawMinute/148; //Obtener el número de minutos actual del sistema
sss[10]=st2.wSecond%148; >
cvSaveImage(sss,image1 ); // Usa la hora actual del sistema como nombre (XXXXXX.jpg) para almacenar la imagen
}
También necesitas crear una carpeta llamada 1 en el directorio raíz de la unidad c Guarde la imagen.