public void Extraer(ProcesarRecuadros procesadorRecuadros, int[] indicesRecuadros = null)
    {
        // indicesRecuadros == 0 >> PROCESAR TODOS
        if (procesadorRecuadros == null)
        {
            return;
        }

        var recuadros = procesadorRecuadros.Recuadros;

        if (recuadros == null || recuadros.Count == 0)
        {
            return;
        }
        Extraer(procesarRecuadros.MatOriginal, recuadros[0]);
    }
    void OnGUI()
    {
        if (texturaSubida)
        {
            var curEvent     = Event.current;
            var dobleColumna = recuadroExaminado != null && position.width > 600;
            var anchoColumna = dobleColumna ? position.width / 2f:0;
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.BeginVertical(GUILayout.MaxWidth(anchoColumna));

            var aspectTextura = texturaSubida.width / (float)texturaSubida.height;
            // var maxWidth = position/2f;


            EditorGUILayout.BeginHorizontal();
            // var areaPreview = GUILayoutUtility.GetRect(0, position.width, 0, alturaPreview);

            // var rect = new UnityEngine.Rect(areaPreview.x, areaPreview.y, areaPreview.height * aspectTextura, areaPreview.height);//GUILayoutUtility.GetAspectRect(aspectTextura);
            var rect = GUILayoutUtility.GetAspectRect(aspectTextura, GUILayout.MaxWidth(aspectTextura * alturaPreview));

            // rect.width /= 2f;
            EditorGUI.DrawTextureTransparent(rect, texturaSubida);
            EditorGUI.DropShadowLabel(rect, $"({texturaSubida.width}x{texturaSubida.height})");
            if (procRecuadros && procRecuadros.Recuadros != null)
            {
                var escala = new Vector2(rect.width / textPrimerPasada.width, rect.height / textPrimerPasada.height);
                foreach (var rec in procRecuadros.Recuadros)
                {
                    var cvbbox = OpenCvSharp.Rect.BoundingBoxForPoints(rec.quadReducido.Select(p => new Point(p.X * escala.x, p.Y * escala.y)).ToArray());
                    var bbox   = new UnityEngine.Rect(cvbbox.X + rect.x, cvbbox.Y, cvbbox.Width, cvbbox.Height);
                    // EditorGUI.DrawRect(bbox, Color.green);
                    if (recuadroExaminado == rec)
                    {
                        GUI.color = Color.green;
                    }
                    EditorGUI.DropShadowLabel(bbox, $"#{procRecuadros.Recuadros.IndexOf(rec)}");
                    GUI.color = Color.white;

                    if (curEvent.type == EventType.MouseUp && bbox.Contains(curEvent.mousePosition))
                    {
                        recuadroExaminado = rec == recuadroExaminado ? null : rec;
                        // if (recuadroExaminado != null) textRecuadro = ActualizarPreview(textRecuadro, rec.matRecuadroNormalizado);
                        if (recuadroExaminado != null)
                        {
                            textRecuadro = ActualizarPreview(textRecuadro, ExtractorDe(rec).matRecuadro);
                        }
                    }
                }
            }
            // rect.x += rect.width;
            if (textRecuadro && recuadroExaminado != null)
            {
                aspectTextura = textRecuadro.width / (float)textRecuadro.height;
                rect          = GUILayoutUtility.GetAspectRect(aspectTextura, GUILayout.MaxWidth(aspectTextura * alturaPreview));
                // rect.width = rect.height * textRecuadro.width / textRecuadro.height;
                EditorGUI.DrawTextureTransparent(rect, textRecuadro);
                EditorGUI.DropShadowLabel(rect, $"({textRecuadro.width}x{textRecuadro.height})");
            }
            else if (textPrimerPasada)
            {
                rect = GUILayoutUtility.GetAspectRect(aspectTextura, GUILayout.MaxWidth(aspectTextura * alturaPreview));
                EditorGUI.DrawTextureTransparent(rect, textPrimerPasada);
            }

            EditorGUILayout.EndHorizontal();

            if (!procRecuadros)
            {
                destruime.Add(procRecuadros = ScriptableObject.CreateInstance <ProcesarRecuadros>());
                Procesar();
                Editor.CreateCachedEditor(procRecuadros, typeof(CustomProcRecuadrosEditor), ref procRecuadrosEditor);
            }

            if (extractoresSprites != null && recuadroExaminado != null)
            {
                DibujarControlSprites();
                SpritesEncontrados(dobleColumna);
            }
            else
            {
                DibujarControlRecuadros();
            }

            EditorGUILayout.EndVertical();
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(pathOrigen));
            if (GUILayout.Button("Save"))
            {
                Save(pathOrigen);
            }
            EditorGUI.EndDisabledGroup();
            if (GUILayout.Button("Save As.."))
            {
                var path = EditorUtility.SaveFilePanelInProject("Guardar Extractor De Sprites", "auto_sprites", "asset", "Puedes volver a cambiar parametros y volver a procesar los sprites");
                if (!string.IsNullOrEmpty(path))
                {
                    Save(pathOrigen = path);
                }
            }
            EditorGUILayout.EndHorizontal();
        }
    }