Red de conocimiento informático - Material del sitio web - Cómo usar DirectShow para crear un programa de captura de cámara en MFC

Cómo usar DirectShow para crear un programa de captura de cámara en MFC

Hay tres métodos comúnmente utilizados para capturar video en vc: vfw, directshow, opencv

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"

#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.