[halcon] 局部图片保存 gen_circle 和 gen_rectangle2 对比 这怕不是bug吧

背景

我想实现一个功能,获取图片中瑕疵的位置,将瑕疵周边的一块区域抠图并保存。

上代码

一开始我代码这么写的:

gen_circle (Rectangle, Row[i], Column[i], 256)
reduce_domain(Image,Rectangle,GrayEllipse)
crop_domain(GrayEllipse, ImagePart1)
write_image(ImagePart1, ‘bmp’, 0, ‘monk01.bmp’)

因为 gen_circle 指定的是半径,所以图片大小为512,是完全正确的:
在这里插入图片描述
但是图片是找个样子的:(所以我还是生成一个方形的吧)
在这里插入图片描述

修改代码

gen_rectangle2 (Rectangle, Row[i], Column[i], 0, 256, 256)
reduce_domain(Image,Rectangle,GrayEllipse)
crop_domain(GrayEllipse, ImagePart1)
write_image(ImagePart1, 'bmp', 0, 'monk01.bmp')

这回图片是没问题了:
在这里插入图片描述
但是,大小居然多了一个像素:
在这里插入图片描述
gen_rectangle2 和 gen_circle 的逻辑几乎一样啊:
gen_rectangle2 设置中心点,然后设置半个长和半个宽
gen_circle 设置中心点,然后设置半径

再次修改代码

为啥gen_rectangle2 会多一个像素呢?
于是,我改了一下代码:

gen_rectangle2 (Rectangle, Row[i], Column[i], 0, 256-0.5, 256-0.5)
reduce_domain(Image,Rectangle,GrayEllipse)
crop_domain(GrayEllipse, ImagePart1)
write_image(ImagePart1, 'bmp', 0, 'monk01.bmp')

长宽各减去了0.5,然后就得到了512*512的图片了。

小结

这算是halcon的bug吗?哪位大神评论区解释下?

局部保存的逻辑

1 首先生成一块区域:如 gen_rectangle2
2 利用区域进行抠图:reduce_domain
3 crop_domain利用reduce_domain抠的图,对原图进行裁剪
4 利用 write_image 保存裁剪后的图片

注意:裁剪图片需要reduce_domain 和 crop_domain配合使用。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供一些思路,帮助您用 OpenCV 实现类似于 Halcon 中的 gen_measure_rectangle2 和 measure_pos 函数的功能。 gen_measure_rectangle2 函数 gen_measure_rectangle2 函数用于生成测量矩形,其参数为中心点坐标、角度、宽度和高度。在 OpenCV 中,我们可以通过旋转矩形来实现类似的功能。 具体步骤如下: 1. 使用 cv::RotatedRect 构造函数创建一个旋转矩形。传入中心点坐标、宽度和高度参数。 2. 使用 cv::RotatedRect::angle 成员函数设置旋转角度。 3. 使用 cv::boxPoints 成员函数,将旋转矩形转换为矩形的四个顶点。将这些点四舍五入并转换为整数。 4. 使用 cv::fillConvexPoly 函数,将矩形顶点填充到测量矩阵中。 5. 返回测量矩阵。 measure_pos 函数 measure_pos 函数用于计算测量矩形的位置,其参数为测量矩形和偏移量。在 OpenCV 中,我们可以通过图像的平移来实现类似的功能。 具体步骤如下: 1. 创建一个空的位置矩阵,使用 cv::Mat::zeros 函数,传入图像高度和宽度参数。 2. 计算测量矩形的中心点坐标。 3. 计算位置矩阵的左上角坐标,使用中心点坐标和偏移量计算。 4. 创建一个平移矩阵,使用 cv::Mat::eye 函数。设置第三列为偏移量的 x 和 y 值。 5. 使用 cv::warpAffine 函数,将测量矩形从原始图像中复制到位置矩阵中。传入平移矩阵作为变换参数。 6. 返回位置矩阵。 希望这些步骤可以帮助您实现类似于 Halcongen_measure_rectangle2 和 measure_pos 函数的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code bean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值