android 图片边缘模糊,android-如何获得轮廓分明的边缘而与颜色无...

我正在尝试开发一个使用Android Camera来检测“万事达卡,签证,客户卡等”卡的应用,为此,我使用了OpenCV4Android 3.0.0版.为了完成此任务,我做了以下工作:

1-使用以下方法将从相机拍摄的帧转换为灰度

Imgproc.cvtColor(this.mMatInputFrame, this.mMatGray, Imgproc.COLOR_BGR2GRAY);

2-使用模糊帧

Imgproc.blur(this.mMatGray, this.mMatEdges, new Size(7, 7));

3-按如下方法使用Canny边缘检测器

Imgproc.Canny(this.mMatEdges, this.mMatEdges, 2, 900, 7, true);

4-为了在真实图像上显示Canny的结果,我做了以下工作

this.mDest = new Mat(new Size(this.mMatInputFrame.width(), this.mMatInputFrame.height()), CvType.CV_8U, Scalar.all(0));

this.mMatInputFrame.copyTo(this.mDest, this.mMatEdges);

5-使用拨号图像

dilated = new Mat();

Mat dilateElement = Imgproc.getStructuringElement(Imgproc.MORPH_DILATE, new Size(3, 3));

Imgproc.dilate(mMatEdges, dilated, dilateElement);

6-找到检测到的卡的轮廓,如下所示:

ArrayList contours = new ArrayList<>();

hierachy = new Mat();

Imgproc.findContours(dilated, contours, hierachy, Imgproc.RETR_CCOMP, Imgproc.CHAIN_APPROX_SIMPLE);

for (int i = 0; i < contours.size(); i++) {

if (Imgproc.contourArea(contours.get(i), true) > 90000) {

Rect rect = Imgproc.boundingRect(contours.get(i));

if (rect.height > 60) {

Imgproc.rectangle(mMatInputFrame, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(255, 0, 0));

}

}

}

当我运行该应用程序时,

情况1

如果要检测的卡片是同色的“整个卡片都涂有相同的颜色”,则Canny会产生边界清晰的边缘,可以很容易地检测出该边缘,如图像“ same-color-0”和“ same-color- 1” .

此外,当我将同色的卡片放在桌子上并在周围移动相机时,即使我在移动相机,也可以正确检测到边缘.或换句话说,红色框包围

记忆卡始终固定在边缘,永不消失

情况2

如果卡的颜色不是“混合色”的同色,则边缘检测很差,如图像“ mixed-color-0”和“ mixed-color-1”所示,并且包围的红色框卡的边缘经常消失.

从该情况扩展的另一种情况是,当卡为两种颜色时,一种是浅色而一种是深色,在这种情况下,边缘检测器仅检测到卡中的深色部分,因为它的边缘定义良好,如图中所示.

“混合色-2”

请让我知道如何获得清晰定义的卡片边缘和卡片大小(无论颜色如何)?

还有其他更准确的边缘检测方法吗?

同色-0:

712b1ead0f631fcdddb92c294c0e49dd.png

同色-1

vSNns.png

混色-0

40ede007dd1e039f3088c52b951f7fa3.png

混色-1

087a3b9ea0f1a38aacbe9ba818dd7394.png

混色-2-

c6952628a8624960a3e74969d495d4f9.png

原始图片:

989abdaa6d20c04ee4b68c50e4578ccd.png

3a324fd69d9ff7f5207dab14e0f286c0.png

85a4e2efc45cee9647f54366aa9eab97.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值