Заполните дыры в OpenCV [дубликат]

Я сделал это использование TortoiseSVN.

созданный в утилите слияния позволяет Вам показывать разность между версией репозитория и Вашей рабочей копией.

Использование эти создает резервное копирование , функция различной утилиты

  1. Идет для фиксации файла, как будто Вы собирались фиксировать все свои изменения.
  2. В окне фиксации, дважды щелкают по файлу, чтобы показать различное
  3. В различных настройках, нажать опцию к , резервный исходный файл .
  4. Щелкает правой кнопкой по изменениям, которые Вы не хотите и используете выбор , используют другой текстовый блок .
  5. Сохраняют разность точно однажды . Резервное копирование будет перезаписано каждый раз, когда Вы сохраняете. Поэтому Вы только хотите сохранить однажды.
  6. Фиксация изменение.
  7. Перезапись оригинал с созданным .bak файлом (который будет иметь все Ваши исходные изменения).
  8. Фиксация Ваш файл.

у Вас должны теперь быть все свои фиксировавшие изменения, с помощью двух отдельных фиксаций.

33
задан Amro 3 October 2012 в 11:46
поделиться

4 ответа

Согласно документации imfill в MATLAB:

 BW2 = imfill (BW, 'дыры');

заполняет дыры в двоичном изображении BW . Дыра - это набор фоновых пикселей, которые не могут быть достигнуты путем заполнения фона от края изображения.

Поэтому, чтобы получить пиксели «дыр», вызовите cvFloodFill с левой стороны. угловой пиксель изображения как начальный. Вы получите отверстия, дополнив изображение, полученное на предыдущем шаге.

Пример MATLAB:

BW = im2bw( imread('coins.png') );
subplot(121), imshow(BW)

% used here as if it was cvFloodFill
holes = imfill(BW, [1 1]);    % [1 1] is the starting location point

BW(~holes) = 1;               % fill holes
subplot(122), imshow(BW)

screenshot1 screenshot2

34
ответ дан 27 November 2019 в 18:02
поделиться

Вы пробовали ContourFinding поверх Cannyied Image?

cvFindContours создает своего рода дерево, в котором внешние счетчики являются родителями внутренних контуров («дыр»). См. Образец contours.py. По контурам можно было извлечь семена

2
ответ дан 27 November 2019 в 18:02
поделиться

Вот быстрый и грязный подход:

  1. Выполните Canny на вашем входном изображении, чтобы новое двоичное изображение имеет 1 по краям, и 0 в противном случае
  2. найдут первые 0 вдоль Сторона вашего края изображения и инициируйте заточку с 1 в этой точке на пустом изображении, используя ваше краевое изображение в качестве маски. (Мы надеемся здесь, что мы не стали вредными и семями этого сначала заполнить внутреннюю часть формы, которая напоминает на экране)
  3. Это новое загорельное изображение - «фон». Любой пиксель здесь, который имеет 1 - это фон, и любой пиксель, который имеет 0, является передним планом.
  4. Структура сквозь изображение и найдет какие-либо пиксели переднего плана. Семя находятся на любом вы найдете.
  5. Или это новое загорельное изображение с вашим Canny Image с шага 1, и вы закончите.
4
ответ дан 27 November 2019 в 18:02
поделиться

функция cvDrawContours имеет возможность заливки контуров, которые вы нарисовали.

Вот небольшой пример. cvDrawContours (IplImage, contours, color, color, -1, CV_FILLED, 8);

Вот документация

http://opencv.willowgarage.com/documentation/drawing_functions.html?highlight=cvdrawcontours#cvDrawContours

Я полагаю, вы опубликовали это очень давно, но я надеюсь, что это кому-то поможет.

Это исходный код (на C #):

        Image<Gray, byte> image = new Image<Gray, byte>(@"D:\final.bmp");
        CvInvoke.cvShowImage("image 1", image);

        var contours = image.FindContours();
        while (contours != null)
        {
            CvInvoke.cvDrawContours(image, contours, new Gray(255).MCvScalar, new Gray (255).MCvScalar, 0, -1, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, new DPoint(0, 0));
            contours = contours.HNext;
        }
        CvInvoke.cvShowImage("image 2", image);

Result

12
ответ дан 27 November 2019 в 18:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: