我需要提取图像的最大轮廓。 这是我目前使用的代码。在线收集了一些片段Android OpenCV查找轮廓
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(outerBox, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
double maxArea = -1;
int maxAreaIdx = -1;
for (int idx = 0; idx < contours.size(); idx++) {
Mat contour = contours.get(idx);
double contourarea = Imgproc.contourArea(contour);
if (contourarea > maxArea) {
maxArea = contourarea;
maxAreaIdx = idx;
}
}
它似乎工作。不过,我不太清楚如何从这里出发。 我尝试使用Imgproc.floodFill
,但我不太确定如何。 该功能需要与原始Mat
+2水平和+2垂直尺寸相同的桅杆Mat
。 当我在轮廓contours.get(maxAreaIdx)
上运行它时,它给了我一个错误。 代码:
Mat mask = Mat.zeros(contour.rows() + 2, contour.cols() + 2, CvType.CV_8UC1);
int area = Imgproc.floodFill(contour, mask, new Point(0,0), new Scalar(255, 255, 255));
错误:
11-18 19:07:49.406: E/cv::error()(3117): OpenCV Error: Unsupported format or combination of formats() in void cvFloodFill(CvArr*, CvPoint, CvScalar, CvScalar, CvScalar, CvConnectedComp*, int, CvArr*), file /home/oleg/sources/opencv/modules/imgproc/src/floodfill.cpp, line 621
所以基本上我的问题是,我怎么能,面积最大发现轮廓,以“突出”之后?我想要其他所有东西都是黑色的,轮廓是白色的
谢谢!
你能提供Java实现吗?我找不到它... – Marek
@Marek你有没有得到这个java的实现? –
在color-blob-detection示例中有java/opencv4android findContours示例。 – Mytheral