我正在尝试使用 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 我意识到我得到的是灰色图像,而作者得到的是清晰的黑色免费背景?即使我们正在执行相同的操作。谢谢。
最佳答案
好的解决方案:
1) 不需要在梯度操作中使用缩放。
2) 需要使用convertScaleAbs方法将图像转换为8bit。
img.convertTo(img, CV_8U, 0.00390625);
不起作用。解决问题! :) pyimage作者的帮助!
关于c++ - Opencv C++ 阈值在 absdiff、条码检测后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27587931/