opencv 一 轮廓识别

基于opencv java api实现图像识别
需求是将图片上的房间多边形识别出来后绘制到地图上,使用户可以在地图上看房间的位置,朝向以及临街等信息并可以选择入住指定房间(给工资就干,需求合不合理我说了不算)
大致思路是识别房间拐角坐标,在根据地图api获取图片左上和右下角的坐标值(经纬度转坐标,amap googlemap地图api支持)
再根据坐标值计算每个角在地图中的坐标值,最后将地图坐标值绘制多边形
代码很多就不一一复制, 有需要代码的评论/私聊我
opencv:
1:二值获取房间矩形

 Core.inRange(src, new Scalar(0, 0, 215), new Scalar(154, 157, 243), mask);
1599467171(1).jpg

2:轮廓提取&截取房间号

Imgproc.findContours(mask, contours, new Mat(), Imgproc.RETR_EXTERNAL, 
//二值房间号房间图片
Core.inRange(mdc, new Scalar(89, 44, 28), new Scalar(113, 74, 63), make);
 //高斯模糊( 由于房间号数字之间可能存在空格高斯模糊后获取一个整体轮廓矩形)
 Imgproc.GaussianBlur(make, mk2, new Size(9, 9), 9, 9);
Imgproc.findContours(mk2, roomRectPointList, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_TC89_KCOS);
//mat转bufferedImage
BufferedImage bufferedImage = ImageMatConverter.mat2BufImg(numberMat, ".png");
//tess4j 识别房间号
instance.doOCR(bufferedImage);
}

3:根据房间矩形获取房间角点
}

  //角点检测,最多8个点
  Imgproc.goodFeaturesToTrack(markMat, markOfPoint, 8, 0.1, 5);
}

原图


1599466655(1).jpg

opencv处理


1599466058(1).jpg

渲染google map


1599468010(1).jpg

你可能感兴趣的:(opencv 一 轮廓识别)