zoukankan      html  css  js  c++  java
  • Halcon旋转图片的研究

    在Halcon中有两个用于图像旋转的函数:

    1,rotate_image

    *Image和ImageRotate分别是输入和输出图像
    
    *Phi是输入的旋转度数
    
    *interpolation是内插方式,默认为'constant'
    
    rotate_image(Image : ImageRotate : Phi, Interpolation : )

    2,affine_trans_image

    *开辟一个旋转矩阵
    (1)hom_mat2d_identity (HomMat2D)
    *为旋转矩阵赋值
    *HomMat2D是输入的旋转矩阵
    *Phi是输入的旋转角度
    *Px和Py分别是输入的旋转中心x坐标值和y坐标值
    *HomMat2DRotate是输出的旋转矩阵
    (2)hom_mat2d_rotate( : : HomMat2D, Phi, Px, Py : HomMat2DRotate)
    *实施旋转
    *Image : ImageAffinTrans分别为输入输出图像
    *HomMat2D是赋值后的旋转矩阵。注意:是赋值后的
    *Interpolation是内插方式,默认为'constant' 
    *AdaptImageSize是bool变量,判断输出图像的大小是否发生变化
    (3)affine_trans_image(Image : ImageAffinTrans : HomMat2D, Interpolation, AdaptImageSize : ) 

    但是,在使用过程中,遇到一个问题。在图片进行旋转之后,图片的四个角都不能很好的保留。我想做的是将图片旋转后,将图片不会缺损,也不会缩小,也就是说原图片旋转后将扩大。然后,我找到一种折中的办法,但是速度很慢,也许达不到要求。还是分享记录一下吧。

    optimize_aop ('rotate_image', 'byte', 'no_file', ['file_mode','model','parameters'], ['nil','threshold','false'])
    set_system ('parallelize_operators', 'true')//只需开一次
    get_image_size(image_ori, Width, Height)
    gen_rectangle1(Rectangle,0,0,Height-1,Width-1)
    get_region_points(Rectangle, Rows, Columns)
    ***************单通道图像的旋转****************
    if(c=1)
        get_grayval(image_ori,Rows,Columns,Grayval)
        HeightL:=3084
        WidthL:=3184
        gen_image_const(Image1, 'byte', WidthL, HeightL)
        Rows:=Rows+(HeightL/2-Height/2)
        Columns:=Columns+(WidthL/2-Width/2)
        set_grayval(Image1,Rows,Columns,Grayval)
        Phi1:=rad(angle)
        vector_angle_to_rigid(HeightL/2, WidthL/2, 0, HeightL/2, WidthL/2, -Phi1, HomMat2D1)
        affine_trans_image(Image1, image_dst, HomMat2D1, 'constant', 'false')
    **************3通道彩色图像的旋转**************** elseif(c
    =3) decompose3(image_ori, ImageR, ImageG, ImageB) get_grayval(ImageR,Rows,Columns,GrayvalR) get_grayval(ImageG,Rows,Columns,GrayvalG) get_grayval(ImageB,Rows,Columns,GrayvalB) HeightL:=3084 WidthL:=3184 gen_image_const(Image1, 'byte', WidthL, HeightL) gen_image_const(Image2, 'byte', WidthL, HeightL) gen_image_const(Image3, 'byte', WidthL, HeightL) Rows:=Rows+(HeightL/2-Height/2) Columns:=Columns+(WidthL/2-Width/2) set_grayval(Image1,Rows,Columns,GrayvalR) set_grayval(Image2,Rows,Columns,GrayvalG) set_grayval(Image3,Rows,Columns,GrayvalB) compose3(Image1, Image2, Image3, MultiChannelImage) Phi1:=rad(-35) vector_angle_to_rigid(HeightL/2, WidthL/2, 0, HeightL/2, WidthL/2, -Phi1, HomMat2D1) affine_trans_image(MultiChannelImage, image_dst, HomMat2D1, 'constant', 'false') endif
  • 相关阅读:
    day77 vue对象提供的属性功能
    day76 作业
    day76 vue框架入门
    day75 bbs项目☞后台管理+修改头像
    day74 bbs项目☞点赞与评论
    day73 bbs项目☞基本功能实现
    day72 bbs项目☞登录注册
    练习题00
    雇1个人工作7天,你有1根金条可以分成7份,只能切2刀,如何保证每天都得到1份金条
    Python正课143 —— DRF 进阶4 权限、频率、过滤、排序
  • 原文地址:https://www.cnblogs.com/supercxm/p/8640639.html
Copyright © 2011-2022 走看看