Я пытаюсь определить штрих-код из изображения с помощью 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) Нет необходимости использовать масштабирование в градиентных операциях.
2) Необходимо использовать метод convertScaleAbs для преобразования изображения в 8-битное.
img.convertTo(img, CV_8U, 0.00390625);
Не работает. Решает проблему! 🙂 Помогает автор pyimage!