首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从等高线生成HALCON区域

从等高线生成HALCON区域
EN

Stack Overflow用户
提问于 2019-12-05 12:10:19
回答 1查看 561关注 0票数 1

在内部数据结构中,我有一个多边形,由表示像素坐标的2D点组成。我需要这个多边形作为一个HALCON区域(HRegion)。转换应该是这样发生的:

代码语言:javascript
复制
HTuple hCols, hRows;
for (auto n = 0; n < nNodes; ++n)
{
    auto v2dNode = GetNode(n);
    hCols.Append(v2dNode.GetX());
    hRows.Append(v2dNode.GetY());
}

HalconCpp::HObject hContour;
HalconCpp::GenContourPolygonXld(&hContour, hRows, hCols);

HalconCpp::HObject hRegion;
HalconCpp::GenRegionContourXld(hContour, &hRegion, "filled");

尽管等高线(HContour)是有效的,但根据Halcon变量检查,创建的区域(hRegion)似乎是空的。HRegion::IsInitialized返回true,但是HRegion::AreaCenter将为区域和位置返回零,这显然是错误的。

这些函数调用也有构造函数版本(例如GenContourPolygonXld),使用“标志性”类型HXLDContHRegion,这也会导致不正确的区域。

我还尝试序列化轮廓,将其保存在一个文件中,并将其加载到HDevelop中。在那里,相应的代码确实创建了一个有效的区域:

代码语言:javascript
复制
open_file('D:/HContour.mvt', 'input_binary', hFile)
fread_serialized_item(hFile, hSer)
deserialize_xld(hContour, hSer)
close_file(hFile)
gen_region_contour_xld(hContour, hRegion, 'filled')
area_center(hRegion, Area, Row, Column)

在C#中,我还加载了该等高线文件,并尝试创建相应的区域。然而,这种做法也造成了一个错误的空旷区域:

代码语言:javascript
复制
HObject hObj;
using (var hFile = new HFile(@"D:\\HContour.mvt", "input_binary"))
{
    FreadSerializedItem(hFile, out var hSerialized);
    DeserializeXld(out hObj, hSerialized);
}
var hContour = new HXLDCont(hObj);
var hRegion = hContour.GenRegionContourXld("filled");
var area = hRegion.AreaCenter(out double row, out var col);
Console.WriteLine($"Area: {area}, Center: {col}|{row}");

Halcon版本为12.0.3。

库中有错误吗,还是我在C++和C#代码中做错了?

编辑:

在执行任何Halcon代码之前,将进行下列设置:

代码语言:javascript
复制
HalconCpp::ResetObjDb(5000, 5000, 1);
HalconCpp::SetSystem("clip_region", "false");
HalconCpp::SetSystem("store_empty_region", "true");

所有坐标都在有效范围内,区域不被裁剪。

用于测试的等高线是

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-05 17:08:29

可能您的区域部分超出了预定义的区域工作空间。意味着一些像素的坐标小于零?

如果是这种情况,那么在加载之前只需运行以下命令:

代码语言:javascript
复制
set_system ('clip_region', 'false')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59194866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档