Halcon联合C++编程
问题1:从C++内存读图转换成HObject变量,使用GenImage1,从指向像素的指针创建一个图像:
如果是先生成了一个(GenCircle)圆区域,然后执行GenImage1,会使区域异常,区域没了。
// 先生成圆regionCircle1
HObject regionCircle1;
int CircleRow = // 972
int CircleCol = // 1180
int CircleRadius = // 100
GenCircle(®ionCircle1, CircleRow, CircleCol, CircleRadius);
GenImage1(&image, "byte", Image->width, Image->height, (Hlong)Image->image); // 作用是将C++中的内存转换为Halcon的图像类型
// 后生成圆regionCircle2
HObject regionCircle2;
GenCircle(®ionCircle2, 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(®ionCircle1, CircleRow, CircleCol, CircleRadius);
// 生成圆regionCircle2
HObject regionCircle2;
GenCircle(®ionCircle2, 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之后。