OpenCV C ++ Thresholding не работает после absdiff, обнаружение штрих-кода

Я пытаюсь определить штрих-код из изображения с помощью OpenCv,
Я использую метод градиента: http://www.pyimagesearch.com/2014/11/24/detecting-barcodes-images-python-opencv/
С помощью следующего вопроса: Как найти местоположение красной области на изображении, используя MATLAB?

Код:

Mat imgco,img,imgx,imgy,thresh;
imgco = imread("/Users/a/Desktop/barcode_01.jpg");

//### Convert image to grayscale ###
cvtColor(imgco,img,CV_BGR2GRAY);
imshow("img", img);
waitKey(0);

//### Finding horizontal and vertical gradient ###

Sobel(img,imgx,CV_16S,1,0,-1,50,0,BORDER_DEFAULT);
imgx = abs(imgx);
imshow("img", imgx);
waitKey(0);

Sobel(img,imgy,CV_16S,0,1,-1,50,0,BORDER_DEFAULT);
imgy = abs(imgy);
imshow("img", imgy);
waitKey(0);

absdiff(imgx, imgy, img);
imshow("img", img);
waitKey(0);

//### Low pass filtering ###
GaussianBlur(img, img, Size(9,9), 0);
imshow("img", img);
waitKey(0);

//### Applying Threshold ###
threshold(img,thresh,225,255,CV_THRESH_BINARY);
imshow("img", thresh);
waitKey(0);

Теперь программа работает корректно вплоть до размытия по Гауссу. Каким-то образом попытка порогового изображения выдает пустой вывод. Кто-нибудь может подсказать в чем может быть проблема?

Гауссовский выход:
Пороговый выход:

Благодарю вас.

ОБНОВЛЕНИЕ: применение пороговой операции перед AbsDiff, приводит к правильному порогу. Следовательно, есть кое-что, связанное с использованием AbsDiff, которое портит пороговое значение. Любая помощь?

ОБНОВЛЕНИЕ 2: Сравнение моего вывода со следующим: http://www.pyimagesearch.com/wp-content/uploads/2014/11/barcode_gradient_and_detection.jpg Я понимаю, что получаю серое изображение, в то время как автор получает четкий черный задний план? Даже когда мы выполняем одни и те же операции. Спасибо.

1

Решение

Хорошо, решение:

1) Нет необходимости использовать масштабирование в градиентных операциях.

2) Необходимо использовать метод convertScaleAbs для преобразования изображения в 8-битное.

img.convertTo(img, CV_8U, 0.00390625);

Не работает. Решает проблему! 🙂 Помогает автор pyimage!

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector