OpenCV llamado nu-libro / ZXing-CPP reconocimiento de código de dos dimensiones

Entorno de instalación:

1. ZXing-CPP después de la formación del código fuente y la compilación lib código fuente, es mi versión v1.0.8, métodos de compilación, consulte: https://www.cnblogs.com/zhenjin-huaxiazongdai/p/12545959.html . ruta del proyecto ZXing-CPP: https://github.com/nu-book/zxing-cpp

2. Visual Studio 2017 instalación https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/ , después de la herramienta de instalación - Obtener las herramientas y el apoyo para añadir "Uso de C ++ desarrollo de escritorio" de apoyo.

3. Instalar ventanas OPENCV y la adición de variables de entorno, por ejemplo, he instalado en la carpeta D: \ OpenCV \ OpenCV, añadir variables de entorno D: \ OpenCV \ OpenCV \ build \ x64 \ VC15 \ bin. OpenCV Observación carpeta podemos conocer, por defecto OpenCV sólo es compatible con x64, x86 necesidad de descargar el código fuente para compilar su propia cuenta. He instalado la versión 4.1.2, descarga ruta:

imagen

Demo del Instituto Agregar : Https://Github.Com/SourceCode-Farmer/ZxingDemo

 

El proceso de grabación:

En primer lugar, agregar dependencias

1. Crear una nueva aplicación de consola de Visual C ++ de Windows ZxingDemo, abra la carpeta del proyecto con los siguientes documentos:

imagen

2. Abra OPENCV instalar el fichero de construcción en la carpeta del directorio, copie la carpeta para incluir la carpeta del proyecto ZxingDemo, opencv_header de cambio de nombre.

imagen

3. Proyecto ZxingDemo carpeta Nueva opencv_lib \ lib64 carpeta, OpenCV abierta instalar el directorio de construcción \ x64 \ VC15 \ carpeta de la liberación, copie los dos archivos a opencv_world412.lib y opencv_world412d.lib carpeta del proyecto ZxingDemo ( Si los cambios de nombre de archivo lib, mover todos los archivos copiados en lib caída).

imagen

4. En ZxingDemo zxing_lib nueva carpeta de archivo del proyecto, copia lib después ZXing-CPP compilado en una carpeta (soluciones nota ZXing-cpp y ZxingDemo compilan configuración de tiempo, la solución debe ser la misma plataforma).

imagen

5. Abrir el archivo de origen ZXing-CPP central en la carpeta, copiar src ZxingDemo al directorio del proyecto, cambiar el nombre de la carpeta a zxing_header.

imagen

Zxing_header 6. Abrir la carpeta, elimine el directorio actual y todos los archivos de subdirectorios CPP.

PS: Si sólo el reconocimiento de códigos Qr, puede eliminar el directorio azteca, MaxiCódigo, oned, PDF417 y textcodec, reservado bajo zxing_header archivo hy Datamatrix, bajo el expediente h archivo QR.

PS: Grupo Al modificar el archivo, puede eliminar los archivos cpp rápida

imagen

 

En segundo lugar, la configuración dependiente

1. vs derecho de propiedad del proyecto, ajustar la configuración de liberación, ajuste la plataforma para x64.

imagen

2. Propiedades - Propiedades de configuración - C / C ++ - General - Directorios de inclusión adicionales, agregue la ruta del archivo de cabecera (pathimagen las hacer ajustes reales, Yihuhuhuapiao).

imagen

3. Propiedades - Propiedades de configuración - Linker - General - Biblioteca Directorios adicional, agregue lib directorio de la biblioteca (el camino real de la imagen para hacer ajustes, Yihuhuhuapiao).

imagen

4. Propiedades - Propiedades de configuración - Linker - General - Dependencias adicionales, agregue todos los nombres de archivo lib (nombre real del archivo lib ajustado) del proyecto ZxingDemo.

imagen

 

En tercer lugar, la codificación

1. Escribir código de archivo ZxingDemo.cpp.

// proyecto real de ajuste de ruta 
#pragma el comentario (lib, "zxing_lib / ZXingCore.lib")

#include " stdafx.h "

# include " zxing_header \ HybridBinarizer.h " 
# include " zxing_header \ LuminanceSource.h " 
# include " zxing_header \ GenericLuminanceSource.h " 
# include " zxing_header \ DecodeHints.h " 
# include " zxing_header \ BinaryBitmap.h " 
# include " zxing_header \ ReadBarcode.h " 
# include " zxing_header \ TextUtfEncoding.h " 
# include " zxing_header \ MultiFormatReader.h "

# include <opencv2 \ opencv.hpp> 
#include <opencv2 \ core \ types_c.h>


estática std :: string WstringToString ( const std :: wstring y WSTR) {
    std :: string str;
    std :: estado mbstate_t = {};
    const wchar_t * datos = wstr.data ();
    size_t len = std :: wcsrtombs (NullPtr, y datos, 0 , & estado);
    si (static_cast <size_t> (- 1 !) = len) {
        std :: unique_ptr < Char []> buff ( nuevo  Char [len + 1 ]);
        len = std :: wcsrtombs (piel de ante. obtener (), y los datos, len, y estado);
        si (static_cast <size_t> (- 1 !) = len) {
            str.assign (piel de ante. obtener (), len);
        }
    }
    volver str;
}

estática  vacío Escanear () {
    cv :: estera, gray_mat;
    // abrir la imagen 
    MAT = CV :: imread ( " test.png " );
     IF (mat.empty ()) {
        std :: cout << " no se encuentra la imagen " << std :: endl;
        volver ;
    }
    // Cambiar a escala de grises 
    CV :: cvtColor (MAT, gray_mat, CV :: COLOR_RGBA2GRAY);
     // anchura altura 
    int height = gray_mat.rows;
     int width = gray_mat.cols;
    automóviles * pixeles = nuevo sin signo de carbonilla [altura * anchura];
    int index = 0 ;
    para ( int i = 0 ; i <altura; i ++ ) {
         para ( int j = 0 ; j <anchura; j ++ ) {
            pixeles [índice ++] = gray_mat.at <unsigned char > (i, j);
        }
    }
    // 识别 
    std :: shared_ptr <ZXing :: GenericLuminanceSource> luminancia = std :: make_shared <ZXing :: GenericLuminanceSource> ( 0 , 0 , anchura, altura, los píxeles, width * sizeof (unsigned char ));
    std :: shared_ptr <ZXing :: BinaryBitmap> mapa de bits = std :: make_shared <ZXing :: HybridBinarizer> (luminancia);
    ZXing :: DecodeHints consejos;
    // necesario para añadir el formato 
    std :: vector <:: BarcodeFormat la ZXing> Formatos = {el ZXing :: BarcodeFormat (BarcodeFormat la ZXing :: :: QR_CODE)};
    hints.setPossibleFormats (formatos);
    lector auto = nuevo ZXing :: MultiFormatReader (indirectas);
    El Resultado Resultado :: la ZXing = lector-> Read (* mapa de bits);
     SI (result.status () == la ZXing DecodeStatus :: :: NoError) {
         // reconocimiento tiene éxito, el resultado de la impresión 
        std :: cout << WstringToString (resultado. de texto ()) << std :: endl;
    }
    otra cosa {
        std :: cout << " Falla " << std :: endl;
    }
}

int main ()
{
    Escanear();
    std :: cin. obtener ();
    volver  0 ;
}

 

2. participar en una imagen código bidimensional prueba.png en el directorio de salida del compilador x64 \ Release en.

 

En cuarto lugar, iniciar

1. Ajustar la configuración de lanzamiento, ajustar la plataforma de 64 bits, haga clic en el "depurador ventanas locales," prueba de arranque.

imagen

2. La salida exitosa.

imagen

V. Preguntas frecuentes

1. 编译 异常: 错误 C4996 'wcsrtombs': Esta función o variable pueden ser inseguros. Considere el uso de wcsrtombs_s lugar. Para desactivar la desaprobación, utilice _CRT_SECURE_NO_WARNINGS. Consulte la ayuda en línea para obtener detalles. ZxingDemo H: \ cpp \ ZxingDemo \ ZxingDemo \ ZxingDemo.cpp 23   
imagen

Solución: Derecho propiedades de los elementos de configuración - Propiedades - C / C ++ - preprocesador - las definiciones del preprocesador, agregue pre-definidos de la siguiente manera.

_CRT_SECURE_NO_WARNINGS
_CRT_NONSTDC_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS_GLOBALS

imagen

2. Después de la ejecución de la anormalidad para iniciar la prueba de error: No se puede iniciar este programa, ya que el equipo perdió opencv_world412.dll. Intente volver a instalar el programa tiene que resolver este problema.

imagen

Causa: El programa no puede encontrar opencv_world412.dll, en general: 1 no está instalado o no se añade OpenCV OpenCV variable de entorno 2. vs2017 abierto después de añadir la variable de entorno OpenCV no está en vigor.

Solución: instalar OpenCV, añadir la variable de entorno Path build \ x64 \ VC15 \ bin (o build \ x64 \ vc14 \ bin). Cerrar Vs2017 vuelva a abrir el proyecto.

Supongo que te gusta

Origin www.cnblogs.com/zhenjin-huaxiazongdai/p/12571824.html
Recomendado
Clasificación