我正在尝试使用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);
现在程序正常工作到高斯模糊,不知何故试图阈值图像给出一个空白输出。任何人都可以提出可能存在的问题吗?
谢谢。
更新:在AbsDiff之前应用阈值操作,导致正确设置阈值。因此,有一些与使用AbsDiff相关的东西,即搞乱阈值。有什么帮助吗?
更新2:将我的输出与以下内容进行比较:http://www.pyimagesearch.com/wp-content/uploads/2014/11/barcode_gradient_and_detection.jpg我意识到当作者获得一个清脆的黑色bacground时,我会得到一个灰色图像?即使我们正在执行相同的操作。谢谢。
答案 0 :(得分:0)
好的解决方案:
1)无需在渐变操作中使用缩放。
2)使用convertScaleAbs方法将图像转换为8位是必要的。
img.convertTo(img, CV_8U, 0.00390625);
不起作用。解决问题! :)由pyimage的作者帮助!