2017-08-03 180 views
0

我在Android中有處理圖像並返回二進制圖像的代碼。在Android中使用opencv繪製輪廓

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); 

enter image description here

[enter image description here] [2

現在,我的要求是,而不是二進制圖像我需要強調的原始圖像上的凹痕。就像這樣:

我想通了就是用

Core.findnonzero() 

得到凹痕的座標,然後對原來的image.This使用drawcontours只是一個想法。

我的問題是: 1.什麼是最好的辦法呢? 2.什麼是matofpoint?

回答

0

您可以在二元圖像上使用OpenGL的findContours()函數(如代碼中的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)); 
}