工作上遇到需要旋转任意角度图片(单通道),但不能有裁剪,以下附上代码。

首先读取所需图片,并绘制ROI区域,获取绘制区域的大小。

dev_get_window (WindowHandle)
dev_set_color ('green')
dev_set_draw ('margin')
read_image (Image, 'C:/Users/18708/Desktop/1233/测试1.png')
rgb1_to_gray (Image, Image)
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
reduce_domain (Image, Rectangle, ImageReduced)
crop_domain (ImageReduced, ImagePart)
get_image_size (ImagePart, Width, Height)

获取图片外接圆的外接正方形边长

*获取图片外接圆的外接正方形
sqtpvalue:=sqrt(Width*Width+ Height* Height)

获取ROI区域每个像素点的灰度值

*获取所绘矩形的每个像素点的灰度值
gen_rectangle1 (Rectangle1, 0, 0,  Height-1,Width-1)
get_region_points (Rectangle1, Rows, Columns)
get_grayval (ImagePart, Rows, Columns, Grayval)

创建正方形空白图像,用来放置ROI区域内的图像,旋转时不会裁剪到ROI区域内的图像

*创建空白图像
gen_image_const(BlackImage, 'byte', sqtpvalue, sqtpvalue)

像素值偏移,使ROI区域内的图像显示到上一步创建的空白图像中

*像素值偏移,使图像显示在空白图像的正中间
Rows:=Rows+(sqtpvalue/2-Height/2)
Columns:=Columns+(sqtpvalue/2-Width/2)
set_grayval(BlackImage, Rows, Columns,Grayval)

最后旋转图像

rotate_image (BlackImage, ImageRotate, 45, 'constant')

附上原图及效果图

左图经过处理,右图直接旋转

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐