我想我現在用的是梯度法使用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?opencv的C++閾值不工作,條形碼檢測
代碼:
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);
現在程序工作正常upto高斯模糊,不知怎的試圖閾值圖像給出一個空白輸出。任何人都可以建議可能是什麼問題?
謝謝。
更新:在AbsDiff之前應用閾值操作,結果正確地閾值化。因此,有一些與使用AbsDiff有關的東西,那就是與閾值混淆。任何幫助?
更新2:將我的輸出與以下內容進行比較:http://www.pyimagesearch.com/wp-content/uploads/2014/11/barcode_gradient_and_detection.jpg我意識到在作者獲得清晰的黑色空白時,我正在顯示灰色圖像?即使我們正在執行相同的操作。謝謝。
您的sobel操作會生成16位圖像,而閾值中的值爲8位 – berak
您可以添加* original *圖像(不帶任何過濾)嗎? – berak
你好,是的。原始圖片:http://www.pyimagesearch.com/wp-content/uploads/2014/11/barcode_01.jpg 我試圖將它縮放到8位: img.convertTo(img,CV_8U,0.00390625); 仍然閾值給出相同的輸出。 –