如何将Halcon的region对象的轮廓点坐标,转换成C++的vector或者其他数据结构存储,并且要求提取的效率比较高?
2条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在Halcon中,一个Region对象代表了一个图像中的特定区域,其轮廓可以通过
GET_CONTOUR
函数获取。要将这些轮廓点转换为C++的std::vector
或其他数据结构,可以按照以下步骤操作。首先,确保已经包含了必要的头文件,并正确地链接了Halcon库。对于VC++项目,这可能包括添加Halcon的头文件路径到编译器选项中,以及将Halcon的动态链接库(.dll)添加到项目的依赖项中。
#include <halcon.h> #include <vector>
接下来,定义一个函数来获取轮廓点并将其存储到
std::vector<cv::Point>
中。这里我们使用OpenCV的cv::Point
结构体来表示二维坐标,因为它非常直观,并且与Halcon的轮廓点格式相匹配(x, y坐标对)。如果你不打算使用OpenCV,也可以创建一个自定义的数据结构来替代。std::vector<cv::Point> getContourPoints(Halcon::ObjectRegion ®ion) { // 获取轮廓点的数量 int num_points = region.GetNumConPoly(); std::vector<cv::Point> contour_points(num_points); // 轮廓点信息是通过数组返回的,所以需要一个临时变量来保存每个点 double temp_point[2]; for (int i = 0; i < num_points; ++i) { // 使用GET_CONTOUR函数获取轮廓点 region.GetConPoly(i, temp_point); // 将Halcon的点转换为OpenCV的点 contour_points[i] = cv::Point(temp_point[0], temp_point[1]); } return contour_points; }
现在,你可以在程序中使用这个函数来处理Region对象并获取轮廓点。例如,假设你已经有了一个名为
my_region
的Region对象:Halcon::ObjectRegion my_region; // ... (此处省略加载图像和识别 Region 的代码) std::vector<cv::Point> contour_points = getContourPoints(my_region); // 现在你可以使用contour_points进行后续处理,比如绘制轮廓等
这样,你就成功地从Halcon的Region对象中提取出轮廓点,并将其存储到了C++的
std::vector<cv::Point>
中。这种方法应该具有较高的效率,因为主要的计算工作都在Halcon内部完成,只涉及到少量的内存拷贝和简单的类型转换。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 Opencv(C++)异常
- ¥15 VScode上配置C语言环境
- ¥15 汇编语言没有主程序吗?
- ¥15 这个函数为什么会爆内存
- ¥15 无法装系统,grub成了顽固拦路虎
- ¥15 springboot aop 应用启动异常
- ¥15 matlab有关债券凸性久期的代码
- ¥15 lvgl v8.2定时器提前到来
- ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
- ¥15 cam_lidar_calibration报错