我在寫一個使用opencv進行文本檢測和提取的程序。 林爲了做邊緣檢測利用Sobel衍生物和已經得到以下結果:OpenCV中的衍生物
但我希望得到以下結果:
(我appologize爲模糊的圖像)
我遇到的問題是邊緣內的「空白區域」「混淆」我使用的算法,所以當算法檢測到「空白部分」與線條之間的兩條線分開,它會變得混亂,並開始跑入信件本身,而不是在兩行之間保持緊密。這個錯誤,我相信可以通過實現第二個結果來解決。
任何人都知道我需要做什麼改變?在衍生品中?也許使用不同的衍生物?
代碼:
Mat ProfileSeamTextLineExtractor::computeDerivative(){
Mat img = _image;
Mat gradiant_mat;
int scale = 2;
int delta = 0;
int ddepth = CV_16S;
GaussianBlur(img, img, Size(3, 3), 0, 0, BORDER_DEFAULT);
Mat grad_x, grad_y;
Mat abs_grad_x, abs_grad_y;
Sobel(img, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);
Sobel(img, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT);
convertScaleAbs(grad_y, abs_grad_y);
/// Total Gradient (approximate)
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, gradiant_mat);
return gradiant_mat;
}
問候,
我是否明白這一點:你想要過濾器增強的字母,但不僅是他們的邊緣,而是完整的字母?所以在第一幅圖像中,例如,有許多白色圓圈有黑色填充。你想瞄準的是將這些白色圓圈填充成白色圓圈? – Niko 2014-09-27 08:07:09
準確。只是要清楚 - 白色圓圈是阿拉伯文字母。 – Nimrodshn 2014-09-27 08:09:23
對於這一刻,第二張圖像看起來就像第一張圖像,但稍微模糊和變平,仍然有黑暗的填充。它真的是你需要的嗎?你爲什麼要使用Sobel?如果您不需要邊緣之間的空白,只需拍攝原始圖像(您可以顯示它?)。 – 2014-09-27 11:21:00