从C++内存读图转换成HObject变量,使用GenImage1遇到问题解决

Halcon联合C++编程

问题1:从C++内存读图转换成HObject变量,使用GenImage1,从指向像素的指针创建一个图像:

如果是先生成了一个(GenCircle)圆区域,然后执行GenImage1,会使区域异常,区域没了。

// 先生成圆regionCircle1
HObject regionCircle1;
int CircleRow = // 972
int CircleCol = // 1180
int CircleRadius = // 100
GenCircle(&regionCircle1, CircleRow, CircleCol, CircleRadius);

GenImage1(&image, "byte", Image->width, Image->height, (Hlong)Image->image); // 作用是将C++中的内存转换为Halcon的图像类型

// 后生成圆regionCircle2
HObject regionCircle2;
GenCircle(&regionCircle2, 972, 1180, 100);

// 结果显示
HObject tempImage;
RegionToBin(regionCircle1, &tempImage, 255, 0, hv_Width, hv_Height);
WriteImage(tempImage, "png", 0, "E://1.png"); // 异常区域

RegionToBin(regionCircle2, &tempImage, 255, 0, hv_Width, hv_Height);
WriteImage(tempImage, "png", 0, "E://2.png"); // 正常区域

结果区域图:

修改代码:

// 这句话放到最前面
GenImage1(&image, "byte", Image->width, Image->height, (Hlong)Image->image); // 作用是将C++中的内存转换为Halcon的图像类型

// 生成圆regionCircle1
HObject regionCircle1;
int CircleRow = // 972
int CircleCol = // 1180
int CircleRadius = // 100
GenCircle(&regionCircle1, CircleRow, CircleCol, CircleRadius);

// 生成圆regionCircle2
HObject regionCircle2;
GenCircle(&regionCircle2, 972, 1180, 100);

// 结果显示
HObject tempImage;
RegionToBin(regionCircle1, &tempImage, 255, 0, hv_Width, hv_Height);
WriteImage(tempImage, "png", 0, "E://1.png"); // 调整后正常区域

RegionToBin(regionCircle2, &tempImage, 255, 0, hv_Width, hv_Height);
WriteImage(tempImage, "png", 0, "E://2.png"); // 正常区域

 结论:生成ROI和调用要在GenImage1之后。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值