【发布时间】:2021-10-11 13:37:38
【问题描述】:
我正在尝试从文档图像中获取感兴趣的区域。感兴趣的区域是文档负责人的签名。我在 android 上使用 opencv 来尝试标记签名区域,但我无法确定要使用哪些参数,以便算法理解它在第一个签名附近。
我想像这样获得感兴趣的区域:
我的代码:
@Override
public void onClick(View v) {
AsyncTask.execute(() -> {
bmScaled.recycle();
Matrix matrix = new Matrix();
matrix.postRotate(angleFinal);
original = Bitmap.createBitmap(original, 0, 0, original.getWidth(), original.getHeight(), matrix, true);
Mat sourceMat = new Mat(original.getWidth(), original.getHeight(), CvType.CV_8UC3);
List<MatOfPoint> contourList = new ArrayList<>(); //A list to store all the contours
Mat imgFinal = new Mat();
Mat hsvMat = new Mat();
Mat opening = new Mat();
Mat close = new Mat();
Mat hierarchy = new Mat();
Mat roiTmp = sourceMat.clone();
Utils.bitmapToMat(original, imgFinal);
Imgproc.cvtColor(imgFinal, hsvMat, Imgproc.COLOR_BGR2HSV);
Scalar lowerb= new Scalar(85, 50, 40);
Scalar upperb= new Scalar(135, 255, 255);
Core.inRange(hsvMat, lowerb, upperb, roiTmp);
Mat mask = new Mat();
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3));
Imgproc.morphologyEx(mask, opening, Imgproc.MORPH_OPEN, kernel);
Imgproc.morphologyEx(opening, close, Imgproc.MORPH_CLOSE, kernel);
//finding contours
Imgproc.findContours(close, contourList, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
//Drawing contours on a new image
Mat contours = new Mat();
contours.create(hierarchy.rows(), hierarchy.cols(), CvType.CV_8UC3);
Random r = new Random();
for (int i = 0; i < contourList.size(); i++) {
Imgproc.drawContours(contours, contourList, i, new Scalar(r.nextInt(255), r.nextInt(255), r.nextInt(255)), -1);
}
Imgcodecs.imwrite(IMAGE_PATH+"/TESTE.jpg", contours);
});
}
【问题讨论】:
标签: java android opencv kotlin image-processing