锶韵妞妞 2024-06-04 17:06 采纳率: 50%
浏览 4

Halcon和vC++

如何将Halcon的region对象的轮廓点坐标,转换成C++的vector或者其他数据结构存储,并且要求提取的效率比较高?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-04 17:06
    关注

    引自免费微信小程序:皆我百晓生

    在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 &region)
    {
        // 获取轮廓点的数量
        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内部完成,只涉及到少量的内存拷贝和简单的类型转换。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月4日

悬赏问题

  • ¥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报错