我想在植物叶片的边缘线上制作相似距离的一组点(如下图所示)。我想在叶子的边缘线上制作红色的小方块。我将叶子边缘线的一组点存储为轮廓。
使用OpenCV / C ++有没有办法做到这一点? (特别是我想要一种方法来存储这些点以供将来使用该应用程序)
提前致谢。
答案 0 :(得分:2)
您需要为已找到的轮廓计算approxPolyDP,aboutPolyDP近似具有指定精度的多边形曲线,您可以在其中调整参数 epsilon 以获得所需的结果。
请在此处查看example有关如何使用aboutPolyDP。
答案 1 :(得分:2)
FindContours可以提取图像的轮廓。 (将图像转换为灰度,之前应用二进制阈值和精确边缘检测,以获得更好的效果。)
矢量>轮廓; cv :: findContours(src_img,contours,hierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE);
绘制轮廓的所有点。代码示例:
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)); }
除此之外,您还可以对轮廓上的所有点使用ApproxPolyDP或PointPolygonTest Opencv函数。查看完整的详细信息和代码示例here。正如您可以在链接上读取的那样,此函数返回点在轮廓外时为负的距离,当点在内部时为正,如果点在轮廓上则为零。 所以你必须只绘制返回零的点。
此致