python实现图像随机裁剪的示例代码

 更新时间:2020年12月10日 17:04:53   作者:我坚信阳光灿烂  
这篇文章主要介绍了python实现图像随机裁剪的示例代码,帮助大家更好的理解和使用python处理图片,感兴趣的朋友可以了解下

实验条件:

  1. 从1张图像随机裁剪100张图像
  2. 裁剪出图像的大小为 60 x 60
  3. IoU 大于等于 th=0.6 的裁剪框用红色标出,其它裁剪框用蓝色标出
  4. IoU 比对原始区域用绿框标出

实验代码:

import cv2 as cv 
import numpy as np

np.random.seed(0)

# get IoU overlap ratio
def iou(a, b):
	# get area of a
 area_a = (a[2] - a[0]) * (a[3] - a[1])
	# get area of b
 area_b = (b[2] - b[0]) * (b[3] - b[1])

	# get left top x of IoU
 iou_x1 = np.maximum(a[0], b[0])
	# get left top y of IoU
 iou_y1 = np.maximum(a[1], b[1])
	# get right bottom of IoU
 iou_x2 = np.minimum(a[2], b[2])
	# get right bottom of IoU
 iou_y2 = np.minimum(a[3], b[3])

	# get width of IoU
 iou_w = iou_x2 - iou_x1
	# get height of IoU
 iou_h = iou_y2 - iou_y1

	# get area of IoU
 area_iou = iou_w * iou_h
	# get overlap ratio between IoU and all area
 iou = area_iou / (area_a + area_b - area_iou)

 return iou


# crop and create database
def crop_bbox(img, gt, Crop_N=200, L=60, th=0.5):
 # get shape
 H, W, C = img.shape

 # each crop
 for i in range(Crop_N):
  # get left top x of crop bounding box
  x1 = np.random.randint(W - L)
  # get left top y of crop bounding box
  y1 = np.random.randint(H - L)
  # get right bottom x of crop bounding box
  x2 = x1 + L
  # get right bottom y of crop bounding box
  y2 = y1 + L

  # crop bounding box
  crop = np.array((x1, y1, x2, y2))

  # get IoU between crop box and gt
  _iou = iou(gt, crop)

  # assign label
  if _iou >= th:
   cv.rectangle(img, (x1, y1), (x2, y2), (0,0,255), 1)
   label = 1
  else:
   cv.rectangle(img, (x1, y1), (x2, y2), (255,0,0), 1)
   label = 0

 return img

# read image
img = cv.imread("../xiyi.jpg")
img1 = img.copy()
# gt bounding box
gt = np.array((87, 51, 169, 113), dtype=np.float32)

# get crop bounding box
img = crop_bbox(img, gt, Crop_N=100, L=60, th=0.6)

# draw gt
cv.rectangle(img, (gt[0], gt[1]), (gt[2], gt[3]), (0,255,0), 1)
cv.rectangle(img1,(gt[0], gt[1]), (gt[2], gt[3]), (0,255,0), 1)

cv.imshow("result1",img1)
cv.imshow("result", img)
cv.imwrite("out.jpg", img)
cv.waitKey(0)
cv.destroyAllWindows()

实验结果:

以上就是python实现图像随机裁剪的示例代码的详细内容,更多关于python 图像裁剪的资料请关注脚本之家其它相关文章!

相关文章

  • python中进程间通信详细介绍

    python中进程间通信详细介绍

    大家好,本篇文章主要讲的是python中进程间通信详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 跟老齐学Python之复习if语句

    跟老齐学Python之复习if语句

    是否记得,在上一部分,有一讲专门介绍if语句的:从if开始语句的征程。在学习if语句的时候,对python编程的基础知识了解的还不是很多,或许没有做什么太复杂的东西。本讲要对它进行一番复习,通过复习提高一下。如果此前有的东西忘记了,建议首先回头看看前面那讲。
    2014-10-10
  • 浅析Windows 嵌入python解释器的过程

    浅析Windows 嵌入python解释器的过程

    这篇文章主要介绍了Windows 嵌入python解释器的过程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • Python sns.distplot()方法的使用方法

    Python sns.distplot()方法的使用方法

    机器学习中经常会用到图形进行可视化,如在网格搜索(GridSearch)后对特征的重要性进行排序时,用到sns.barplot()函数按照重要程度输出特征,这篇文章主要给大家介绍了关于Python sns.distplot()方法的使用方法,需要的朋友可以参考下
    2022-03-03
  • Python 字符串转换为整形和浮点类型的方法

    Python 字符串转换为整形和浮点类型的方法

    今天小编就为大家分享一篇Python 字符串转换为整形和浮点类型的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • django自定义非主键自增字段类型详解(auto increment field)

    django自定义非主键自增字段类型详解(auto increment field)

    这篇文章主要介绍了django自定义非主键自增字段类型详解(auto increment field),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 使用 OpenCV 开发虚拟键盘的方法

    使用 OpenCV 开发虚拟键盘的方法

    OpenCV是一个强大的图像处理工具,用于机器学习、图像处理等的跨平台开源库,用于开发实时计算机视觉应用程序,本文重点给大家介绍使用 OpenCV 开发虚拟键盘的方法,感兴趣的朋友一起看看吧
    2021-11-11
  • Python Flask请求扩展与中间件相关知识总结

    Python Flask请求扩展与中间件相关知识总结

    今天带大家学习的是关于Python Flask的相关知识,文章围绕着Flask请求扩展与中间件的知识展开,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06
  • python数据库操作常用功能使用详解(创建表/插入数据/获取数据)

    python数据库操作常用功能使用详解(创建表/插入数据/获取数据)

    这篇文章主要介绍了python数据库操作常用功能使用方法:获取mysql版本、创建表、插入数据、slect获取数据等,下面看示例吧
    2013-12-12
  • PyQt5实现画布小程序

    PyQt5实现画布小程序

    这篇文章主要为大家详细介绍了PyQt5实现画布小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05

最新评论