把图片按照指定大小剪裁,不够的地方加黑边

简介: 1 # -*- coding: utf-8 -*- 2 3 import os 4 import sys 5 import numpy as np 6 import cv2 7 8 IMAGE_SIZE = 224 9 10 11 # 按照指定图像大小调整尺寸12 de...
 1 # -*- coding: utf-8 -*-
 2 
 3 import os
 4 import sys
 5 import numpy as np
 6 import cv2
 7 
 8 IMAGE_SIZE = 224
 9 
10 
11 # 按照指定图像大小调整尺寸
12 def resize_image(image, height=IMAGE_SIZE, width=IMAGE_SIZE):
13     top, bottom, left, right = (0, 0, 0, 0)
14 
15     # 获取图像尺寸
16     h, w, _ = image.shape
17 
18     # 对于长宽不相等的图片,找到最长的一边
19     longest_edge = max(h, w)
20 
21     # 计算短边需要增加多上像素宽度使其与长边等长
22     if h < longest_edge:
23         dh = longest_edge - h
24         top = dh // 2
25         bottom = dh - top
26     elif w < longest_edge:
27         dw = longest_edge - w
28         left = dw // 2
29         right = dw - left
30     else:
31         pass
32 
33         # RGB颜色
34     BLACK = [0, 0, 0]
35 
36     # 给图像增加边界,是图片长、宽等长,cv2.BORDER_CONSTANT指定边界颜色由value指定
37     constant = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_CONSTANT, value=BLACK)
38 
39     # 调整图像大小并返回
40     return cv2.resize(constant, (height, width))
41 
42 
43 # 读取训练数据
44 images = []
45 labels = []
46 
47 
48 def read_path(path_name):
49     for dir_item in os.listdir(path_name):
50         # 从初始路径开始叠加,合并成可识别的操作路径
51         full_path = os.path.abspath(os.path.join(path_name, dir_item))
52 
53         if os.path.isdir(full_path):  # 如果是文件夹,继续递归调用
54             read_path(full_path)
55         else:  # 文件
56             if dir_item.endswith('.jpg'):
57                 image = cv2.imread(full_path)
58                 image = resize_image(image, IMAGE_SIZE, IMAGE_SIZE)
59 
60                 # 放开这个代码,可以看到resize_image()函数的实际调用效果
61                 # cv2.imwrite('1.jpg', image)
62 
63                 images.append(image)
64                 labels.append(path_name)
65 
66     return images, labels
67 
68 
69 # 从指定路径读取训练数据
70 def load_dataset(path_name):
71     images, labels = read_path(path_name)
72 
73     # 将输入的所有图片转成四维数组,尺寸为(图片数量*IMAGE_SIZE*IMAGE_SIZE*3)
74     # 我和闺女两个人共1200张图片,IMAGE_SIZE为64,故对我来说尺寸为1200 * 64 * 64 * 3
75     # 图片为64 * 64像素,一个像素3个颜色值(RGB)
76     images = np.array(images)
77     print(images.shape)
78 
79     # 标注数据,'me'文件夹下都是我的脸部图像,全部指定为0,另外一个文件夹下是闺女的,全部指定为1
80     labels = np.array([0 if label.endswith('me') else 1 for label in labels])
81 
82     return images, labels
83 
84 path = 'D:/pycode/facial-keypoints-master/test/'
85 if __name__ == '__main__':
86     img =  cv2.imread(path+'000891.jpg')
87     image = resize_image(img)
88     cv2.imshow('img', image)
89     cv2.imwrite("D:\\1.jpg", image)
90     cv2.waitKey(0)
91     cv2.destroyAllWindows()
92 
93     if len(sys.argv) != 2:
94         print("Usage:%s path_name\r\n" % path)
95     else:
96         images, labels = load_dataset(path)

 

目录
相关文章
hutool工具获得一个只包含数字的字符串
hutool工具获得一个只包含数字的字符串
|
存储 Java 测试技术
|
8月前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(07) 她气鼓鼓递来一条SQL | 怎么看执行计划、SQL怎么优化?
在日常研发工作当中,系统性能优化,从大的方面来看主要涉及基础平台优化、业务系统性能优化、数据库优化。面对数据库优化,除了DBA在集群性能、服务器调优需要投入精力,我们研发需要负责业务SQL执行优化。当业务数据量达到一定规模后,SQL执行效率可能就会出现瓶颈,影响系统业务响应。掌握如何判断SQL执行慢、以及如何分析SQL执行计划、优化SQL的技能,在工作中解决SQL性能问题显得非常关键。
|
7月前
|
移动开发 前端开发 JavaScript
React音频播放列表组件:常见问题、易错点与解决方案
本文介绍了在React中实现音频播放列表时常见的挑战及解决方案。通过基础实现、常见问题分析和最佳实践,帮助开发者避免状态管理、生命周期控制和事件处理中的陷阱。关键点包括使用`useRef`操作音频元素、`useState`同步播放状态、全局状态管理防止多音频同时播放、以及通过`useEffect`清理资源。还提供了代码示例和跨浏览器兼容性处理方法,确保高效实现功能并减少调试时间。
243 30
|
存储 SQL 分布式计算
MaxCompute产品使用问题之如何查看项目空间耗用的存储大小
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
240 3
|
负载均衡 算法 大数据
[flink 实时流基础] 转换算子
[flink 实时流基础] 转换算子
264 2
|
SQL 存储 关系型数据库
【mysql】将逗号分割的字段内容转换为多行并group by
【mysql】将逗号分割的字段内容转换为多行并group by
|
测试技术
测试资源不足怎么办?
测试资源不足怎么办?
392 0
|
缓存 NoSQL Java
SpringBoot - 缓存入门详解与注解使用实例
SpringBoot - 缓存入门详解与注解使用实例
406 1
|
前端开发 JavaScript 应用服务中间件
nginx配置vue前端代理
nginx配置vue前端代理
451 0