图像锐化和边缘检测是什么关系,可以先后操作吗?我想获取清晰的边缘
不知道你这个问题是否已经解决, 如果还没有解决的话:原始图像
颜色筛选
先用以下函数将原始图片由BGR空间转换YCrCb空间
Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2YCrCb);
再提取Cr分量,对分量调用Ostu阈值分割,注意这里得到的是目标区域的二值图,将其作为掩模与原图进行与运算即可提取出目标区域。
Imgproc.threshold(img_cr, dst, 0, 255, Imgproc.THRESH_OTSU);
3. 中值模糊
这里需要进行一次滤波是为了减少过多噪音Canny边缘检测的影响。
在均值滤波、中值滤波、高斯滤波中采取不会丢失重叠边缘的中值滤波。
4. Canny边缘检测
跟阈值分割一样,以检测到的边缘图片做掩模加深原图边缘。
5. 过侵蚀
6. 开运算
7. 灰度化、二值化
先灰度化将三通道转为单通道,再根据灰度值二值化。
8. 凸包填充
识别过程不需要进行闭运算进行空洞填充,因为在保留边缘的条件下可直接识别凸包进行填充,注意填充凸包后要重绘凸包边界,防止边缘连接,否则就会如下图:
正确示范:
9. 椭圆拟合
主要调用以下两个函数:
Imgproc.findContours(dst, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE,
new Point(0, 0));
Imgproc.fitEllipse(dst); //调用此函数前要判断轮廓点超过5个,否则会报错
这里面积较小的柑橘未识别出来,是因为我将面积小于最大连通区域1/5的连通区域当成噪音去除了。
10. 结果图像
互关