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.

OpenCV, error de segmentación aleatoria

Estoy teniendo un extraño fallo de segmentación y estoy agotado, justo cuando estoy a punto de comenzar a usar el programa.

cout << type2str(fg.type()) << endl; // "8UC4"
if (type2str(fg.type()) == "8UC4"){
  // fg es una Mat cargada desde fg = imread(path);
  fg_channels = fg.at<vec4b>(v_index, h_index); // Se produce el fallo de segmentación aquí de manera determinista al 100%
}
else if (type2str(fg.type()) == "8UC3")
{
  temp = fg.at<vec3b>(v_index,h_index);
  fg_channels = Vec4b(temp.val[0], temp.val[1], temp.val[2], 255);
}

¿Cómo puedo obtener más información de C++ sobre el fallo de segmentación? Estoy perdiendo la cabeza, esto está sucediendo dentro de los límites de la imagen que he escrito en fg.

Esto no sucede hasta aproximadamente a la mitad de fg, tanto las filas como las columnas se iteran muchas veces. ¿Alguna idea de cómo puedo solucionar este problema? ¿Y el fallo de segmentación me indica algo útil sobre el problema que estoy teniendo? Normalmente pienso en un índice fuera de límites cuando obtengo un fallo de segmentación, pero no creo que tenga sentido aquí.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener más información sobre el error de segmentación, puedes intentar ejecutar el programa en un depurador como gdb. Cuando ocurre el error de segmentación, el depurador te proporcionará una traza de pila que muestra la secuencia de llamadas a funciones que llevaron al fallo. Esto puede ayudarte a localizar la ubicación del error en tu código.

    Además, puedes intentar añadir más declaraciones de salida de depuración a tu código para reducir el problema. Por ejemplo, puedes imprimir los valores de v_index y h_index antes de la llamada a fg.at para asegurarte de que están dentro de los límites de la imagen.

    Un error de segmentación generalmente indica un problema de acceso a memoria, como intentar leer o escribir en una memoria que no ha sido asignada o que ya ha sido liberada. También puede ocurrir si intentas acceder a memoria fuera de los límites de un array u otra estructura de datos. Por lo tanto, es posible que el problema esté relacionado con la indexación del objeto Mat.

Comments are closed.