机器视觉之halcon入门(29)-浅谈图片的裁剪
(1)
有一个图片裁剪的万能公式:
reduce_domain()+crop_domain()
reduce_domain大家很熟悉了,就是给一张图片,给一个region,然后把图片里面region意外的地方像素灰度值信息都删除,只保留位于region内部的像素点的值,虽然图片灰度值信息变小了,但是图片的大小并没有变,所以还需要第二步crop_domain()。这个算子的意思是:先对图片中有灰度值信息的地方求最小外接矩形,然后把图片裁剪成这个矩形的大小,注意:1)最小外接矩形只能是水平的,2)经过这一步图片的大小发生了变化。具体效果如下:
![87e65ab5b4dc9e8dd1842e18c8ed3aa0.png](https://i-blog.csdnimg.cn/blog_migrate/602995b1aaffb84fb77c9c656955c7d7.jpeg)
在图中画了一个倾斜的矩形region
![3ae76a9befecd5eff49113ffa8078f43.png](https://i-blog.csdnimg.cn/blog_migrate/b06aa949dd24c27a81f7746a3845fe27.jpeg)
reduce_domain()后的效果,图片的尺寸没有变化
![cdaf5db6107a50491f2477b540fc8da6.png](https://i-blog.csdnimg.cn/blog_migrate/8f02a9502bc3de78059cb409c22706f9.jpeg)
crop_domain()后的效果
(2)
使用这个万能公式,需要有region,还需要两行代码,不是所有的时候都很方便,例如我要把当前图片左边30列像素裁剪掉呢?如果用下面这个算子一步就搞定:
![cb6e7f58e9c619976ff47b308adc1ae0.png](https://i-blog.csdnimg.cn/blog_migrate/37a2be3e63d998433b3942f14d39f14a.jpeg)
这个算子的意思是,直接从图片的四条边进行裁剪。前两个参数含义一目了然了,第三个到最后一个参数,就是分别在图片的上左下右四个方向的裁剪像素值,如果要实现刚刚例子里面的情况,只要把第四个参数left设为30就可以了。不裁剪的边,直接设为0或者负数都可以。
(3)
会了这两个算子,基本上90%的裁剪都能满足了,但是有时候还会有一些奇葩的要求,比如我要把下图中七个彩色矩形的区域分别裁剪下来成小图片
![bab7bbd765c357be16c116cc51beca34.png](https://i-blog.csdnimg.cn/blog_migrate/45d22b607fab518c3af46c8d1810abe1.jpeg)
可能下面这个算子可以避免你循环裁剪
![5ff12d7954c2e7fad65a476bb3a13399.png](https://i-blog.csdnimg.cn/blog_migrate/b2140cb5c32031baabf424216ed7631f.jpeg)
只要把每个矩形的左上角和右下角的坐标填入第三到第六个参数里面即可。输出的ImagePart就会是一个容器,里面图片的数量取决于你的矩形个数。n个矩形的参数填写方式如下:
![ea2c8db929de298448224a257e044cae.png](https://i-blog.csdnimg.cn/blog_migrate/6916bf782dea00a4a840a638f500df46.jpeg)
当然,如果你只知道要裁剪的矩形的长宽和左上角点的坐标,也可以用下面这个算子:
![4dc632e015ff00e9ca56f89b87ca6421.png](https://i-blog.csdnimg.cn/blog_migrate/2dc600c51b3b4255e59f7560408420d6.jpeg)
跟上面那个一样的效果,只是参数表达方式不一样而已。
谢谢阅读,希望对大家有一点帮助!
1