gpt4 book ai didi

c# - 从轮廓生成HALCON区域

转载 作者:行者123 更新时间:2023-12-02 10:23:08 24 4
gpt4 key购买 nike

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

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 Variable Inspect,创建的区域( hRegion)似乎是空的。 HRegion::IsInitialized返回true,但是 HRegion::AreaCenter的面积和位置均返回零,这显然是错误的。

这些函数调用也有构造函数版本(例如 GenContourPolygonXld),使用“iconic”类型 HXLDContHRegion也会导致错误的区域。

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

Contour Corresponding region

在C#中,我还加载了轮廓文件并尝试创建相应的区域。但是,这种方法也会导致错误地显示为空区域:
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代码之前,请进行以下设置:
HalconCpp::ResetObjDb(5000, 5000, 1);
HalconCpp::SetSystem("clip_region", "false");
HalconCpp::SetSystem("store_empty_region", "true");

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

用于测试的轮廓为 this

最佳答案

可能是您的区域部分在预定义区域工作空间之外。意味着某些像素的坐标小于零?

如果是这种情况,请在加载之前执行以下命令:

set_system ('clip_region', 'false')

关于c# - 从轮廓生成HALCON区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59194866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com