我想找到黑色物体的所有顶点(例如返回x,y位置)。 我将使用Java和JavaCV来实现。是否有任何API或算法可以提供帮助?
抱歉没有足够的声誉来发布图片。我在这里发布链接。
原始图像如下:
http://i.stack.imgur.com/geubs.png
预期结果如下:
答案 0 :(得分:0)
OpenCV允许您拍摄二进制图像并执行轮廓分析。
http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.html
您可以使用findContours查找所有轮廓(所有边缘点),然后简单地平均它们或选择适合您目的的轮廓。
这是JavaCV的一个很好的例子..
opencv/javacv: How to iterate over contours for shape identification?
答案 1 :(得分:0)
以下是您应该做的事情(有关解释,请参阅代码注释),
<强> CODE 强>
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// Load the image
String path = "/home/bikz05/Desktop/geubs.png";
Mat original = Highgui.imread(path);
Mat image = new Mat();
Imgproc.cvtColor(original, image, Imgproc.COLOR_BGR2GRAY);
// Threshold the image
Mat threshold = new Mat();
Imgproc.threshold(image, threshold, 127, 255, 1);
// Find the contours
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(threshold, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
// Get contour index with largest area
double max_area = -1;
int index = 0;
for(int i=0; i< contours.size();i++) {
if (Imgproc.contourArea(contours.get(i)) > max_area) {
max_area = Imgproc.contourArea(contours.get(i));
index = i;
}
}
// Approximate the largest contour
MatOfPoint2f approxCurve = new MatOfPoint2f();
MatOfPoint2f oriCurve = new MatOfPoint2f( contours.get(index).toArray() );
Imgproc.approxPolyDP(oriCurve, approxCurve, 6.0, true);
// Draw contour points on the original image
Point [] array = approxCurve.toArray();
for(int i=0; i < array.length;i++) {
Core.circle(original, array[i], 2, new Scalar(0, 0 ,255), 2);
}
INPUT IMAGE
输出图片