Opencv C ++在absdiff,条形码检测之后无法正常工作

时间:2014-12-21 08:47:19

标签: c++ opencv image-processing barcode-scanner threshold

我正在尝试使用OpenCv从图像中检测条形码, 我正在使用渐变方法:http://www.pyimagesearch.com/2014/11/24/detecting-barcodes-images-python-opencv/ 在以下问题的帮助下:How to find the location of red region in an image using 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);

现在程序正常工作到高斯模糊,不知何故试图阈值图像给出一个空白输出。任何人都可以提出可能存在的问题吗?

Gaussian Output: Threshold Output:

谢谢。

更新:在AbsDiff之前应用阈值操作,导致正确设置阈值。因此,有一些与使用AbsDiff相关的东西,即搞乱阈值。有什么帮助吗?

更新2:将我的输出与以下内容进行比较:http://www.pyimagesearch.com/wp-content/uploads/2014/11/barcode_gradient_and_detection.jpg我意识到当作者获得一个清脆的黑色bacground时,我会得到一个灰色图像?即使我们正在执行相同的操作。谢谢。

1 个答案:

答案 0 :(得分:0)

好的解决方案:

1)无需在渐变操作中使用缩放。

2)使用convertScaleAbs方法将图像转换为8位是必要的。

img.convertTo(img, CV_8U, 0.00390625);

不起作用。解决问题! :)由pyimage的作者帮助!