es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Procesamiento de varias imágenes – estándares

Trabajo con imágenes. Tengo un botón que utilizo para seleccionar una imagen en formato bmp:

if (OpenPictureDialog1->Execute())
{
    Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
}

La imagen se muestra en un componente TImage. Luego divido la imagen en sectores y cuento todos los puntos negros en cada sector. Después de eso, recibo un vector de signos y lo normalizo dividiendo por el elemento máximo en el vector de signos. Luego guardo los valores del vector normalizado en un DynamicArray de la biblioteca <sysdyn.h> y muestro el resultado en un componente TMemo:

DynamicArray<double> NormArr1;
NormArr.Length = n;
Memo1->Lines->Add("El vector normalizado es:");
for (i = 0; i < n; i++)
{
    NormArr[i] = cop[i] / (double) max;
    Memo1->Lines->Add(NormArr[i]);
}
Memo1->Lines->Add("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");

Necesito procesar varias imágenes de la misma manera, pero en DynamicArray solo se guarda los resultados del procesamiento de una imagen. Por lo tanto, debo hacer clic en el botón, seleccionar una imagen y encontrar su vector normalizado. Luego debo elegir otra imagen utilizando el mismo botón y también encontrar su vector normalizado. Después de eso, necesito comparar los elementos de estos vectores.

Lo más importante es que debo usar solo un botón y seleccionar no exactamente 2 sino muchas imágenes, y comparar sus vectores normalizados. ¿Cómo puedo hacer esto? Necesito la implementación correcta del entrenamiento automático de imágenes.

Aquí está mi formulario:

image</sysdyn.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para procesar múltiples imágenes y comparar sus vectores normalizados, puedes utilizar un bucle para llamar repetidamente al código que carga la imagen, la divide en sectores y calcula el vector normalizado. En lugar de guardar el resultado en un único DynamicArray, puedes crear un vector de DynamicArrays para almacenar los vectores normalizados de cada imagen.

    Aquí tienes un ejemplo de implementación:

    1. Crea un vector de DynamicArray para almacenar los vectores normalizados.
    vector<><double>> normVectors;
    
    1. Agrega un bucle para manejar múltiples imágenes.
    for(int i = 0; i < numOfImages; i++){
        //Código para cargar la imagen, dividirla en sectores y calcular el vector normalizado
        DynamicArray<double> normArr;
        //...
        //Agrega el vector normalizado al vector de vectores
        normVectors.push_back(normArr);
    }
    
    1. Utiliza el vector normVectors para comparar los vectores normalizados de las diferentes imágenes.
    for(int i = 0; i < normVectors.size(); i++){
        for(int j = i+1; j < normVectors.size(); j++){
            //Compara los elementos de normVectors[i] y normVectors[j]
        }
    }
    

    Ten en cuenta que numOfImages debería ser una variable que establezcas con la cantidad de imágenes que deseas procesar. Además, la comparación en el bucle anidado asume que solo necesitas comparar cada par de imágenes una vez (es decir, imagen 1 con imagen 2, imagen 1 con imagen 3, imagen 2 con imagen 3, etc.). Si necesitas comparar todas las combinaciones de imágenes, necesitarás un algoritmo diferente para el bucle anidado.

Comments are closed.