【发布时间】:2018-10-19 00:36:10
【问题描述】:
我正在使用 opencv.js。
我正在尝试找到对从手机拍摄的图像实施二进制过滤器的最佳方法,以便清楚地看到图像上的文字。自适应阈值不是很好 - 噪音太大。我正在尝试使 Otsu 阈值起作用,但我失败了。
从tutorials in the other OpenCV docs 看来,您最好先进行高斯模糊,然后再进行 Otsu 阈值(将 0 作为阈值传入)。
对于阈值,只需传递零。然后算法找到最佳阈值并将您作为第二个输出返回,retVal
当我使用 0 作为阈值时,我得到一个全白的结果。如果我传入一些合理的值(例如 128),我会得到一个不错的结果,但图像的一些较暗区域会被洗掉。我怎样才能让这个“最佳阈值”(通过零)为 opencv.js 工作?
let src = cv.imread('canvasInput');
let dst = new cv.Mat();
let ksize = new cv.Size(3, 3);
//Blur & conver to gray
cv.GaussianBlur(src, dst, ksize, 0);
cv.cvtColor(dst, dst, cv.COLOR_BGR2GRAY, 0);
/* PROBLEM HERE:
* passing 0 returns all white, passing 128 is a reasonable result
*/
cv.threshold(dst, dst, 0, 255, cv.THRESH_BINARY&cv.THRESH_OTSU);
cv.imshow('canvasOutput', dst);
【问题讨论】:
标签: javascript opencv computer-vision