我正在使用opencv.js。
我正在尝试找到对从手机上拍摄的图像实施二进制过滤器的最佳方法,以便清楚地看到图像上的文本。自适应阈值不是很好-噪音太大。我正在尝试使Otsu阈值正常工作,但失败了。
从Text style看来,您最好先进行高斯模糊,然后再执行Otsu阈值(将0传入阈值)。
对于阈值,只需传递零即可。然后,算法找到最佳阈值,并将您作为第二个输出retVal
返回
当我使用0作为阈值时,我得到全白结果。如果我输入合理的值(例如128),则会得到不错的结果,但是图像的某些较暗区域会被洗掉。如何获得此“最佳阈值”(传递零)以供opencv.js使用?
php artisan config:clear
答案 0 :(得分:1)
如果图像的内容不仅仅是文本,那么全局阈值处理方法(例如Otsu)将失败。
保持自适应阈值,但在阈值上添加一个小的正或负常数。
答案 1 :(得分:1)
没有自动获得“最佳阈值”的方法。
但是您可以尝试使用Adaptive Threshold,我认为CLAHE可能有助于解决问题。
答案 2 :(得分:1)
问题是这条线
cv.threshold(dst, dst, 0, 255, cv.THRESH_BINARY&cv.THRESH_OTSU);
由于cv.THRESH_BINARY和cv.THRESH_OTSU = 0,
您实际上是这样做的
cv.threshold(dst, dst, 0, 255, 0); <===== 0 = cv.THRESH_BINARY
要将一个标志附加到另一个标志,应使用“ OR”运算符。
因此此行应更改为
cv.threshold(dst, dst, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU);