CenterCrop图像裁剪原理

- 日理万妓 2023-01-23 10:53 319阅读 0赞

CenterCrop模式解决的就是:

  1. 图片要去两头,留中间
  2. 图片要填充满控件

    我们按照Image与ImageView的宽高比差值,分两种情况进行讨论。

    假设原始图片高h,宽w , Imageview的高y,宽x ,比较两者高宽比。裁剪出的图称为Image1:

    1、 当 y / x - h / w > 0 时

    说明Imageview的高宽比大于图片的高宽比,如图所示:
    ccd51df78246b4ad3677cb92247641ef.png

左图实线标示的是图片Image的高和宽,右图是Imageview。 我们需要从Image的中间按照比例y/x裁剪出一幅图Image1来,如图中虚线所示。

显而易见,Image1的宽度是w1,高度是h 。

Image1的高宽比必须和Imageview的高宽比相同,即 y / x = h / w1 , 计算出 w1 = (h * x )/ y

2、当 y / x - h / w <= 0时

说明Imageview的高宽比小于图片的高宽比,如图所示:

4168bdc372f6558aa708d9f40fe6eeed.png

显而易见,Image1高度为h1, 宽度为w ,依据 y / x = h1 / w , 计算出 h1 = (w * y) / x

pytorch官方文档说明:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIzNzAxODU_size_16_color_FFFFFF_t_70

现在通过一个案例进行介绍:

代码:

  1. import torchvision.transforms
  2. import PIL.Image as Image
  3. import torchvision.transforms
  4. #读入图片
  5. image=Image.open("/home/alisa/PycharmProjects/attack/target_attack/1/train_target.png")
  6. print(image.size, image.format, image.mode)
  7. #生成一个CenterCrop类的对象,用来将图片从中心裁剪成224*224
  8. crop_obj = torchvision.transforms.CenterCrop((224, 224))
  9. image = crop_obj(image)
  10. #将裁剪之后的图片保存下来
  11. image.save("/home/alisa/PycharmProjects/attack/target_attack/1/train_target2.png", format='PNG')

效果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIzNzAxODU_size_16_color_FFFFFF_t_70 1

发表评论

表情:
评论列表 (有 0 条评论,319人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Arcgis中图像裁剪

    使用arcmap对数据进行剪裁,[Arcgis][]中的裁剪分为很多种,有矢量裁剪矢量,矢量裁剪栅格,栅格裁剪栅格。本文主要操作,掩膜裁剪(矢量裁剪栅格)和clip 裁剪。

    相关 python裁剪图像

    之前以为python裁剪图像很难,后来才发现知道裁剪坐标以后(坐标根据目标检测进行坐标变换吧),就很简单了。 1.裁剪 import cv2 cut =

    相关 图片裁剪原理

    写在最前面(不看也不会少一个亿) 最开始的一个小需求 前两天项目中有个小需求:前端下载后台小哥返回的二进制流文件。 起初接到这个需求时,我感觉这很简单啊(虽然我不

    相关 C#实现图像的鼠标裁剪

    C\的图像裁剪很容易操作,这里给个实现的例子 关键是需要处理鼠标的事件和一些更新 实现鼠标移动的代码.注意更新不要全部重画,只有选择矩形部分重画     C\的图像裁

    相关 eps格式图像空白边缘裁剪

    经常使用matlab制作各种曲线图,为了在latex中使用且避免失真,一般可保存为eps格式,但是有时由于原来的图像可能有较大的空白边缘,在文章中显示效果不佳,可以将图片裁剪去