我在Android中有代码处理图像并返回二进制图像。
Imgproc.cvtColor(source, middle, Imgproc.COLOR_RGB2GRAY);
Mat element = Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, new Size(15, 15), new Point(0, 0));
Imgproc.morphologyEx(middle, middle, MORPH_TOPHAT, element, new Point(0, 0));
Imgproc.threshold(middle, middle, 20, 255, Imgproc.THRESH_BINARY);
[] [2
现在,我的要求是,我需要突出原始图像上的凹痕,而不是二进制图像。像这样:
我想到的是使用
Core.findnonzero()
获取凹痕的坐标,然后在原始图像上使用drawcontours。这只是一个想法。
我的问题是: 1.最好的方法是什么? 2.什么是matofpoint?
答案 0 :(得分:0)
您可以在二进制图像上使用findContours()
OpenCV函数(middle
,如代码中所示),然后遍历列表中的顶级轮廓并在原始图像上绘制它们(源代码) )图像,就像这样:
List<MatOfPoint> contours = new ArrayList<>();
Mat hierarchy = new Mat();
Imgproc.findContours(middle, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
// now iterate over all top level contours
for(int idx = 0; idx >= 0; idx = (int) hierarchy.get(0, idx)[0]) {
MatOfPoint matOfPoint = contours.get(idx);
Rect rect = Imgproc.boundingRect(matOfPoint);
Imgproc.rectangle(originalImage, rect.tl(), rect.br(), new Scalar(0, 0, 255));
}