天下没有免费的午餐, 最近开发需要拍摄一张图片识别图片中钢筋的数量,这可把我难住了, 没弄过, 于是我网上搜索一番下来, 用opencv比较好点, 当然用python效果更好, 没办法谁叫我是java开发呢? 好了废话不多说, 天下没有免费的午餐, 我们这里需要不断训练,计算,识别才能得到我们的结果, 在看完这篇文章后以此类推,可以让你大体知道识别其他物体的过程。(我只是提供一种思想,具体的算法过程还是需要大家相互借鉴)
在使用opencv4之前需要自己去配置它, 网上很多我也推荐一些链接https://www.cnblogs.com/jnhs/p/11310471.html。最后我的界面是这样的
我这里有两种方式识别钢筋的方式。
一 (通过轮廓里面的点集合来判断)
//检测一张图片中的所有轮廓并画出来
private static void drawAllArea() throws Exception{
Mat src = getImageMat(filePath);
Mat gary = new Mat();
Imgproc.cvtColor(src, gary, Imgproc.COLOR_BGR2GRAY);
//图像边缘处理
Mat edges = new Mat();
Imgproc.Canny(gary, edges, 200, 500, 3, false);
List<MatOfPoint> list = new ArrayList<MatOfPoint>();
Mat hierarchy = new Mat();
//发现轮廓
Imgproc.findContours(edges, list, hierarchy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_NONE);
//画出轮廓
Im