Android-OpenCV边缘检测
我正在Android上使用OpenCV进行车牌识别。作为过程的一部分,我使用Canny边缘检测来查找图像中的边缘。我遇到的问题是,图像中的水平边没有被检测为实线。问题是,因为这些线不是实心的,所以我无法将其检测为一个轮廓 这是我正在运行边缘检测的图像 这是边缘检测的结果。正如您所看到的,车牌的垂直边缘被检测为实线,但水平线是虚线 这是我的密码Android-OpenCV边缘检测,android,image-processing,opencv,Android,Image Processing,Opencv,我正在Android上使用OpenCV进行车牌识别。作为过程的一部分,我使用Canny边缘检测来查找图像中的边缘。我遇到的问题是,图像中的水平边没有被检测为实线。问题是,因为这些线不是实心的,所以我无法将其检测为一个轮廓 这是我正在运行边缘检测的图像 这是边缘检测的结果。正如您所看到的,车牌的垂直边缘被检测为实线,但水平线是虚线 这是我的密码 org.opencv.imgproc.Imgproc.Canny(snapshot.getImage(), dst,
org.opencv.imgproc.Imgproc.Canny(snapshot.getImage(), dst,
Configurator.PlateDetectCannyThreshold1,
Configurator.PlateDetectCannyThreshold2,
Configurator.PlateDetectCannyApperture);
List<Mat> contours = new Vector<Mat>();
org.opencv.imgproc.Imgproc.findContours(dst, contours, new Mat(),
org.opencv.imgproc.Imgproc.CV_RETR_LIST,
org.opencv.imgproc.Imgproc.CV_CHAIN_APPROX_SIMPLE,
new org.opencv.core.Point(0, 0));
org.opencv.imgproc.imgproc.Canny(snapshot.getImage(),dst,
Configurator.PlateDetectCanythReshold1,
Configurator.PlateDetectCanythReshold2,
配置器。平台检测控制器);
列表等高线=新向量();
org.opencv.imgproc.imgproc.findContours(dst、等高线、新Mat(),
org.opencv.imgproc.imgproc.CV\u RETR\u列表,
org.opencv.imgproc.imgproc.CV\u CHAIN\u approc\u SIMPLE,
新org.opencv.core.Point(0,0));
一种快速而肮脏的解决方案是使用如上所述的形态闭合操作
形态学关闭操作有助于填补小间隙。我在执行文档边缘检测并使用形态学扩展边缘以更好地检测时遇到类似问题:
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_DILATE, new Size(3,3), new Point(1,1));
Imgproc.dilate(mIntermediateMat, mIntermediateMat, kernel);
你在坎尼的门槛很差。把它们放低一点,我已经试过了。我应该提到我的上限阈值为300,下限为0,但我已经将上限图像逐渐降低到0,这没有什么区别上限阈值应该设置在40120左右,下限阈值为0.4*upper,或upper/3。我觉得读一点书总是好的<谷歌上的code>wiki canny,阅读canny的工作原理。重要的是,我尝试过调整阈值,我对算法的工作原理有很好的理解,但我仍然看到水平线存在同样的问题。从我对问题的理解来看,可能会因为线的角度而导致问题,而且它不是完全水平的。我可能可以使用OpenCV Correase修复它,有人知道如何让Correase在Android中工作吗?因为我的测试只给了我一张黑色的图片。你可以分享你执行的步骤吗?@RBK请参考它,它非常好地描述了这些步骤。