使用opencv(Java)的阈值图像
我正在为我的项目使用Opencv。我需要将下面的图像转换为阈值图像 我尝试了这个功能:使用opencv(Java)的阈值图像,java,android,opencv,image-processing,tesseract,Java,Android,Opencv,Image Processing,Tesseract,我正在为我的项目使用Opencv。我需要将下面的图像转换为阈值图像 我尝试了这个功能: Imgproc.threshold(imgGray, imgThreshold, 0, 255, Imgproc.THRESH_BINARY + Imgproc.THRESH_OTSU); 但结果并不好,正如你在下面看到的 因此我尝试了自适应阈值函数: Imgproc.adaptiveThreshold(imgGray, imgThreshold, 255, Imgproc.ADAPTIVE_THRE
Imgproc.threshold(imgGray, imgThreshold, 0, 255, Imgproc.THRESH_BINARY + Imgproc.THRESH_OTSU);
但结果并不好,正如你在下面看到的
因此我尝试了自适应阈值函数
:
Imgproc.adaptiveThreshold(imgGray, imgThreshold, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 11, 2);
结果是:
我只希望一个只有白色背景和黑色文本的二值图像,没有黑色区域或噪声(我不喜欢使用Photo.fastnl意味着去噪,因为这需要很多时间)。请帮我解决这个问题
另外,我正在使用Tesseract
进行日语识别,但准确率不高。您对提高日语的OCR或提高Tesseract质量的方法有何建议 adaptiveThreshold
是这里的正确选择只需稍作调整。
使用这些参数(它是C++,但是你可以很容易地翻译成java)
生成的图像是:
我很久没有使用openCV了,所以我可能在胡说八道。你不能搜索轮廓,轮廓外的东西都是白色,轮廓内的东西都是黑色吗?根据输入的类型,结果图像应该非常清晰和准确。非常感谢。这对我来说非常合适。我只是不明白最后一个参数(40)的意思。你能解释一下吗?@BeeBee这是一个从平均值中减去的常数。阅读更多信息,可以在这里向我展示java代码,即使在kotlin中也可以,需要从image@Miki我无法在AndroidStudio中解析Mat1b,也没有任何建议。我正在使用OpenCV4.2。你能建议如何/在哪里解决这个问题吗?
Mat1b gray= imread("path_to_image", IMREAD_GRAYSCALE);
Mat1b result;
adaptiveThreshold(gray, result, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, 40);