OpenCV圖像識別功能所需的方法使用介紹 Android版-java語言

努力的柳某人 2022-01-07 13:24:29 阅读数:560

opencv 功能 所需 方法 使用

我用的版本為Android的opencv的3.4.2版本
我從python和c語言一個一個試過來過來的能用的功能
我做過的項目有:1.手繪幾何圖像識別,2.相機圖片截取並透視變換,3.數字識別,不提供項目代碼,但親測可用
Mat就類似於Bitamp類,但是在我這個版本(V3.4.2)不能與Bitmap互相轉換,V4.0+以後的版本可以互轉

List<MatOfPoint> contours=new ArrayList<>();//點集
MatOfInt hull;
MatOfPoint2f approx;
Mat src = Imgcodecs.imread(input/**你的文件路徑string*/, Imgcodecs.IMREAD_UNCHANGED);//讀取圖形
Mat dst = new Mat();
Mat kernel = new Mat(3, 3, CvType.CV_32F, new Scalar(-1));
kernel.put(1, 1, 8.9);//這個我忘記幹啥的了,但是銳化得用 sorry
Imgproc.filter2D(src, dst, src.depth(), kernel);//銳化
Imgproc.cvtColor(dst, dst, Imgproc.COLOR_RGB2GRAY);//灰度化
Imgproc.GaussianBlur(dst, dst, new Size(15, 15), 0, 0);//高斯濾波
Imgproc.dilate(dst, dst, new Mat(), new Point(-1, -1), 3, 1, new Scalar(1)); // 膨脹,連接邊緣
Imgproc.Canny(dst, dst, 10, 22);//邊緣檢測
Imgproc.threshold(dst, dst, 0, 255, Imgproc.THRESH_OTSU);//二值化
Imgproc.findContours(dst, contours, hierarchy, Imgproc.RETR_LIST, CHAIN_APPROX_SIMPLE); //查找輪廓點 
Imgproc.drawContours(dst, contours, -1, new Scalar(255, 255, 255), 3);//繪制點
Mat element = Imgproc.getStructuringElement(Imgproc.MARKER_CROSS, new Size(3, 3));
Imgproc.dilate(dst, dst, element);//膨脹
Imgproc.erode(dst, dst, element);//腐蝕
Imgproc.morphologyEx(dst, dst, Imgproc.MORPH_GRADIENT, element);//閉運算
//透視變換
Mat pt = Imgproc.getPerspectiveTransform(mat/**存有4個點的變換前Mat類型*/, size/**存有4個點的變換後Mat類型*/);
Imgproc.warpPerspective(src, src, pt, new Size(maxSize.width, maxSize.height), INTER_LINEAR);
Rect rectangleIn = Imgproc.boundingRect(new MatOfPoint(contours.get(i).toArray()/**輪廓的集合*/));//最小外接矩形 
 如有錯誤懇請糾正,轉載請注明出處
版权声明:本文为[努力的柳某人]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201071324287511.html