我是靠谱客的博主 靓丽金鱼,最近开发中收集的这篇文章主要介绍OpenCV 去噪 轮廓线 外接矩形 Java,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

去噪

  • 中值滤波
    • 输入:灰度化后的图
  • Opening开运算:先腐蚀再膨胀叫开运算,作用能消除图片上的小标点。
    • 先腐蚀掉一些小像素点
      • 如果这些小像素点是孤岛
        • 再膨胀时,这些小的像素点就不复存在了
      • 如果这些小像素不点是孤岛
        • 再膨胀时,这些小的像素点又被补回来一些
  • Closing闭运算:先膨胀后腐蚀。作用是消除图片上的小黑点。

背景中有极多噪点的图片,去噪比较困难。

OpenCV(14)–图像形态学操作(腐蚀、膨胀、开闭及边角检测)

轮廓线+外接矩形

找出轮廓线

不一定为规则图形

  • drawContours​(Mat image, java.util.List<MatOfPoint> contours, int contourIdx, Scalar color, int thickness)
    • contours
      • 所有轮廓线的坐标点
    • color       
      • new Scalar(255, 255, 255): white
    • thickness
      • 线条厚度
        • -1:填充轮廓内围区域

java.lang.Object org.opencv.imgproc.Imgproc

代码

  • 画出最大轮廓线

  • 画出轮廓线外接框

//画出最大轮廓线
double maxVal = 0;
int maxValIdx = 0;
for (int contourIdx = 0; contourIdx < contours.size(); contourIdx++)
{
    double contourArea = Imgproc.contourArea(contours.get(contourIdx));
    if (maxVal < contourArea)
    {
        maxVal = contourArea;
        maxValIdx = contourIdx;
    }
}

Imgproc.drawContours(contourImg, contours, maxValIdx, new Scalar(255,255,255), 5);
Imgcodecs.imwrite("outpath,jpg", contourImg);

//画出图中最大轮廓线的外接矩形
Mat rectMat = new Mat(image.rows(), image.cols(), image.type());
MatOfOpint2f matOfPoint2f = new MatofPoint2f(contours.get(maxValIdx).toArray());
RotatedRect rotatedRect = Imgproc.minAreaRect(matOfPoint2f );

Point[] vertices = new Point[4];  
rotatedRect .points(vertices);  
for (int j = 0; j < 4; j++){  
    //draw 4 white line, thicked 5
    Imgproc.line(rectMat, vertices[j], vertices[(j+1)%4], new Scalar(255,255,255), 5);
        }

Imgcodecs.imwrite("outpath,jpg", rectMat);

how to find largest contour in java opencv

opencv how to draw minAreaRect in java

最后

以上就是靓丽金鱼为你收集整理的OpenCV 去噪 轮廓线 外接矩形 Java的全部内容,希望文章能够帮你解决OpenCV 去噪 轮廓线 外接矩形 Java所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部