Recuperé un contorno de una imagen y quiero trabajar específicamente en los píxeles del contorno. Necesito encontrar la suma (no el área) de los valores de píxel en el contorno. OpenCV solo admite ROI en forma de rectángulo, así que no tengo idea de cómo hacerlo. cvSum también solo acepta imágenes completas y no tiene una opción de máscara, por lo que estoy un poco perdido sobre cómo proceder. ¿Alguien tiene alguna sugerencia sobre cómo encontrar la suma de los valores de píxeles en un contorno específico?¿Tratar con píxeles en contornos (OpenCV)?
Respuesta
Primero obtenga todos sus contornos. Utilice esta información para crear una imagen binaria con las partes blancas siendo el contorno y el área del contorno. Realice una operación Y en las dos imágenes. El resultado serán los contornos y el área sobre un fondo negro. Luego, suma todos los píxeles en esta imagen.
En primer lugar, lo que está sugiriendo me dará la suma de TODOS los contornos. Quiero cada suma por separado, no totalmente. En segundo lugar, como dije en mi pregunta, no quiero calcular el área del contorno, sino el valor de los píxeles que ya no son negros en el contorno. Su método hará que todos los píxeles en el contorno sean blancos, desafiando por completo el punto de la aplicación. – fdh
cuando Y la imagen binaria y la imagen original, lo que obtienes es una imagen aislada. No obtendrás una imagen completamente blanca. Si quiere uno a la vez, puede crear la máscara binaria y AND las dos imágenes de a una por vez. – scord
lo siento si no me explicaba bien. Pero yo mismo hice algo similar con éxito. – scord
Si entiendo bien, desea sumar todas las intensidades de píxeles de una imagen gris que se encuentran dentro de un contorno. Si es así, el método en el que pienso es dibujar ese contorno en una imagen en blanco y llenarla, haciéndote así una máscara. Después de que para optimizar el proceso también se puede calcular la rect de delimitación del contorno con:
CvRect cvBoundingRect(CvArr* points, int update=0);
Después de esto se puede hacer una imagen intermedia con:
void cvAddS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL);
utilizando el valor 0, la máscara obtenida desde el contorno y establecer antes como ROI el rect limitante.
Después de esto, una suma en la imagen resultante será un poco más rápida.
Gracias. Por lo que entiendo, básicamente estás aislando el contenido de los contornos, usando una máscara. Veo cómo funciona, pero realmente no entiendo el propósito del rectángulo delimitador. Si el contenido del contorno se ha aislado, ¿de qué sirve tener un ROI? – fdh
El punto es trabajar en una región más pequeña cuando se calcula la suma o cualquier otra operación que implique atravesar cada píxel de una imagen. – Adrian
para acceder al punto del contorno sigue individualmente el código
vector<vector<Point> > contours;
...
printf("\n Contours pixels \n");
for(int a=0; a< contours.size(); a++)
{
printf("\nThe contour NO = %d size = %d \n",a, contours[a].size());
for(int b = 0; b < contours[a].size(); b++)
{
printf(" [%d, %d] ",contours[a][b].x, contours[a][b].y);
}
}
Esto solo dará como resultado los puntos a lo largo de los bordes del contorno. No los píxeles dentro. – David
- 1. ¿Cómo encontrar contornos en OpenCV?
- 2. OpenCV detectar contornos intersección
- 3. Contornos opencv: Cómo eliminar pequeños contornos en una imagen binaria
- 4. ¿Cómo suavizo las curvas (contornos) en OpenCV?
- 5. OpenCV C++/Obj-C: Conectar contornos cercanos
- 6. Ciclo a través de píxeles con opencv
- 7. OpenCV findcontours devuelve 2 contornos para cada círculo
- 8. Contornos coincidentes - encontrar contornos desplazamiento
- 9. Cómo filtrar contornos formados por círculos superpuestos en OpenCV
- 10. Selección de los píxeles con la mayor intensidad en OpenCV
- 11. ¿Cuál es el algoritmo que usa opencv para encontrar contornos?
- 12. Asignación de color de Opencv con acceso directo de píxeles
- 13. Eliminación de píxeles ruidosos usando opencv
- 14. Cómo puedo fusionar blobs/contornos
- 15. OpenCV 2.3: Convertir Mat a matriz de píxeles RGBA
- 16. Cómo tratar eficazmente con una gran cantidad de HTML5 datos de píxeles lona sobre websockets
- 17. Tratar con comas en CSV
- 18. Código de ejemplo de OpenCV para buscar contornos: problema de desasignación de vectores
- 19. ¿Usar la jerarquía en findContours() en OpenCV?
- 20. opencv/javacv: ¿Cómo iterar sobre los contornos para la identificación de formas?
- 21. Tratar con JAXB Colecciones
- 22. Extraiga contornos de ContourPlot en Mathematica
- 23. ¿Cómo obtener puntos de una línea en OpenCV?
- 24. Hallando la longitud del contorno en opencv
- 25. ¿Número incorrecto de contornos en javacv?
- 26. ¿Usar ROI en OpenCV?
- 27. Tratar con tampones de char
- 28. ¿Cómo tratar con referencias circulares?
- 29. OpenCV: configuración de todos los píxeles del valor de BGR específico en otro valor de BGR
- 30. ¿Tratar con conjuntos anidados en mysql?
¿Cuál es la representación del contorno? Coordenadas de píxeles? Imagen/máscara? ¿Por qué no puedes simplemente recorrer los píxeles? –
Lo siento pero realmente no entiendo la pregunta. El contorno consiste en una secuencia de puntos que rodean un área específica. No veo cómo puedo simplemente recorrer los píxeles. El contorno puede tener cualquier forma, desde el contorno de un cuerpo humano hasta el de un perro, la falta de una forma fija significa que realmente no puedo "hacer un círculo" – fdh
Si los píxeles del contorno se dan como coordenadas en alguna matriz, recorra ese conjunto, tome coordenadas de él y luego mire el píxel de la imagen con esas coordenadas. Si el contorno está en una imagen y sus píxeles tienen un color específico (o rango) que los distingue de todo lo demás, simplemente recorra los píxeles de la imagen y observe sus colores para ver si son los píxeles del contorno. Si no tiene las coordenadas y no hay un rango de color específico para los píxeles de contorno, es un tipo diferente de problema, es más difícil. Usted no especificó la representación. Es por eso que pregunté al respecto –