Java+Opencv4 计算图像的面积
程序员文章站
2022-05-20 19:38:14
...
环境配置移步:Java+Opencv 入门(IDEA测试+环境配置+参数配置)
public static void main(String[] args) {
// 1. 加载由libname参数指定的系统库
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 2. 打开图片
Mat src = Imgcodecs.imread("D:/1.jpg");
if (src.dataAddr()==0){
System.out.println("打开文件出错");
}
Mat mat = src;
Imgcodecs.imwrite("D:/opencv/1-0.jpg", mat);
//图片转换成灰度
Imgproc.cvtColor(src, src, Imgproc.COLOR_BGR2GRAY,0);
Imgcodecs.imwrite("D:/opencv/1-1.jpg", src);
//高斯模糊
Imgproc.GaussianBlur(src, src, new Size(15, 15), 0);
Imgcodecs.imwrite("D:/opencv/1-2.jpg", src);
//二值化操作
Imgproc.threshold(src,src,0,255,THRESH_BINARY | THRESH_TRIANGLE);
Imgcodecs.imwrite("D:/opencv/1-3.jpg", src);
//轮廓发现--得到contours和hierarchy
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat hierarchy = new Mat();
Imgproc.findContours(src, contours, hierarchy, Imgproc.RETR_TREE,
Imgproc.CHAIN_APPROX_SIMPLE, new Point(-1, -1));
Imgcodecs.imwrite("D:/opencv/1-4.jpg", hierarchy);
//相当于创建和原图尺寸相同一张黑色的图,用于后面画线作图
Mat contoursImg = Mat.zeros(mat.size(), CV_8UC3);
for(int i=0;i<contours.size();i++){
Rect rect = boundingRect(contours.get(i));
// if (rect.width < mat.cols() / 2)
// continue;
//在contoursImg上绘制最大的轮廓
Imgproc.drawContours(contoursImg,contours,i, new Scalar(0,0,255),
2,8,hierarchy,0,new Point(0, 0));
double area = contourArea(contours.get(i));
System.out.println("第"+i+"个图像的面积是 "+area);
}
Imgcodecs.imwrite("D:/opencv/1-5.jpg", contoursImg);
}
运行结果:
第0个图像的面积是 1761271.0
第1个图像的面积是 9820.5
第2个图像的面积是 8.5
第3个图像的面积是 3635.5
第4个图像的面积是 1003.0
第5个图像的面积是 1469.0
第6个图像的面积是 205.0
第7个图像的面积是 245100.0
第8个图像的面积是 11540.5
第9个图像的面积是 7646.0
第10个图像的面积是 7506.5
第11个图像的面积是 1651.0
第12个图像的面积是 2920.5
第13个图像的面积是 217.0
第14个图像的面积是 1307.5
第15个图像的面积是 963.0
第16个图像的面积是 591.0
第17个图像的面积是 4814.0
第18个图像的面积是 484.0
第19个图像的面积是 1216.5
第20个图像的面积是 60068.5
第21个图像的面积是 65.0
第22个图像的面积是 2154.5
第23个图像的面积是 323.0
第24个图像的面积是 7436.0
第25个图像的面积是 252.0
第26个图像的面积是 2632.0
第27个图像的面积是 614.0
第28个图像的面积是 343.0
第29个图像的面积是 168.0
第30个图像的面积是 10.0
第31个图像的面积是 7929.0
第32个图像的面积是 220.0
第33个图像的面积是 227.0
第34个图像的面积是 223.5
图片展示:
部分参数说明:
Imgproc.findContours(Mat image, List contours, Mat hierarchy, int mode, int method, Point offset)
参数说明:
image:8位单通道图像。
contours:存储检测到的轮廓的集合。
hierarchy:可选的输出向量,包含了图像轮廓的拓扑信息。
mode:轮廓检索模式。有如下几种模式:
1、RETR_EXTERNAL只检测最外围的轮廓
2、RETR_LIST提取所有的轮廓,不建立上下等级关系,只有兄弟等级关系
3、RETR_CCOMP提取所有轮廓,建立为双层结构
4、RETR_TREE提取所有轮廓,建立网状结构
method:轮廓的近似方法。取值如下:
1、CHAIN_APPROX_NONE获取轮廓的每一个像素,像素的最大间距不超过1
2、CHAIN_APPROX_SIMPLE压缩水平垂直对角线的元素,只保留该方向的终点坐标(也就是说一条中垂线a-b,中间的点被忽略了)
3、CHAIN_APPROX_TC89_LI使用TEH_CHAIN逼近算法中的LI算法
4、CHAIN_APPROX_TC89_KCOS使用TEH_CHAIN逼近算法中的KCOS算法
offset:每个轮廓点的可选偏移量。
上一篇: Redis单机版和集群搭建部署
推荐阅读
-
CAD中怎么图纸怎么测量面积? CAD面积的两种计算方法
-
AutoCAD计算二维图形面积的技巧
-
Python3计算三角形的面积代码
-
C#图像处理之图像均值方差计算的方法
-
荐 【图像处理】——实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(connectedComponentsWithStats()函数和connectedComponents()函数)
-
Raptor怎么计算已知半径r的圆的面积?
-
Matlab图像处理:误拒率、误识率意义,计算等错误率的Matlab源码(网络首发)
-
python自动计算图像数据集的RGB均值
-
C++使用例子,根据半径计算圆的周长和面积
-
CAD怎么计算图形面积? cad计算图纸面积的两种教程