使用OpenCV在轮廓线上标记点

时间:2014-06-30 06:17:40

标签: c++ opencv image-processing contour edge-detection

我想在植物叶片的边缘线上制作相似距离的一组点(如下图所示)。我想在叶子的边缘线上制作红色的小方块。我将叶子边缘线的一组点存储为轮廓。

enter image description here

使用OpenCV / C ++有没有办法做到这一点? (特别是我想要一种方法来存储这些点以供将来使用该应用程序)

提前致谢。

2 个答案:

答案 0 :(得分:2)

您需要为已找到的轮廓计算approxPolyDP,aboutPolyDP近似具有指定精度的多边形曲线,您可以在其中调整参数 epsilon 以获得所需的结果。

请在此处查看example有关如何使用aboutPolyDP。

答案 1 :(得分:2)

  1. FindContours可以提取图像的轮廓。 (将图像转换为灰度,之前应用二进制阈值和精确边缘检测,以获得更好的效果。)

    矢量>轮廓; cv :: findContours(src_img,contours,hierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE);

  2. 绘制轮廓的所有点。代码示例:

    cv :: Mat draw = cv :: Mat :: zeros(500,500,CV_8UC3);

    int contour_id = 1;

    for(int i = 0; i< contour [contour_id] .size(); i ++) {     cout<<轮廓[contour_id] [i]<< ENDL;     CV ::圆(平局,轮廓[contour_id] [I]中,1,CV ::标量(0,0,255)); }

  3. 除此之外,您还可以对轮廓上的所有点使用ApproxPolyDP或PointPolygonTest Opencv函数。查看完整的详细信息和代码示例here。正如您可以在链接上读取的那样,此函数返回点在轮廓外时为负的距离,当点在内部时为正,如果点在轮廓上则为零。 所以你必须只绘制返回零的点。

    此致