去除图像周围的0像素,调整大小

2024-04-22 18:36

本文主要是介绍去除图像周围的0像素,调整大小,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在做分割任务时,经常需要处理图像,如果图像周围有一圈0像素,需要去除掉,重新调整大小

数组的处理

如果图像的最外一圈为0,我们将图像最外圈的图像0去除掉。

import numpy as npdef remove_outer_zeros(arr):# 获取数组的行数和列数rows, cols = arr.shape# 检查最外层是否存在0top_row_zero = np.all(arr[0, :] == 0)bottom_row_zero = np.all(arr[-1, :] == 0)left_col_zero = np.all(arr[:, 0] == 0)right_col_zero = np.all(arr[:, -1] == 0)# 如果最外层有0,将其去除if top_row_zero:arr = arr[1:, :]if bottom_row_zero:arr = arr[:-1, :]if left_col_zero:arr = arr[:, 1:]if right_col_zero:arr = arr[:, :-1]return arr# 测试
a = np.array([[0,0,0,0,0,0],[0,1,2,0,3,0],[0,2,0,3,6,0],[0,0,5,6,13,0],[0,5,8,0,0,0],[0,0,0,0,0,0]])
new_arr = remove_outer_zeros(a)
print(a)
print(new_arr)

[[ 0  0  0  0  0  0]
 [ 0  1  2  0  3  0]
 [ 0  2  0  3  6  0]
 [ 0  0  5  6 13  0]
 [ 0  5  8  0  0  0]
 [ 0  0  0  0  0  0]]
[[ 1  2  0  3]
 [ 2  0  3  6]
 [ 0  5  6 13]
 [ 5  8  0  0]]

 灰度图像的处理

 如果我们处理的图像为灰度图像

import numpy as np
from PIL import Image
from matplotlib import pyplot as pltdef remove_outer_zeros(image_path):# 打开图像img = Image.open(image_path)pixels = img.load()# 获取图像的尺寸width, height = img.size# 寻找最外层全为0的行和列top, bottom, left, right = 0, height, 0, widthfor i in range(height):if all(pixels[x, i] == 0 for x in range(width)):top = i + 1else:breakfor i in range(height - 1, -1, -1):if all(pixels[x, i] == 0 for x in range(width)):bottom = ielse:breakfor i in range(width):if all(pixels[i, y] == 0 for y in range(height)):left = i + 1else:breakfor i in range(width - 1, -1, -1):if all(pixels[i, y] == 0 for y in range(height)):right = ielse:break# 剪裁图像cropped_img = img.crop((left, top, right, bottom))cropped_img = np.array(cropped_img)return cropped_img# 调用函数
image_path = r"D:\BaiduNetdiskDownload\DRIVE\DRIVE\training\mask\21_training_mask.gif"img = np.array(Image.open(image_path))
cropped_img = remove_outer_zeros(image_path)print(img.shape)
print(cropped_img.size )# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimSun']# 创建一个包含四个子图的画布
# 创建一个包含四个子图的画布
fig, axes = plt.subplots(1, 2)# 第一张子图:原始图像
axes[0].imshow(img)
axes[0].set_title('原始图像')
axes[0].axis('off')# 第二张子图:插值后的图像
axes[1].imshow(cropped_img)
axes[1].set_title('裁剪后图像')
axes[1].axis('off')
# 调整布局,防止标题重叠
plt.tight_layout()# 展示图像
plt.show()# # 保存新的图像
# new_image.save("new_image.gif")

彩色图像的处理 

这是我们的原始图像 大小为(299,200,3)

 

 我们将原始图像扩充50个0像素后的图像

from PIL import Image, ImageOps
import numpy as npdef expand_image(image_path, padding):# 打开图像image = Image.open(image_path)# 获取图像原始尺寸width, height = image.size# 创建一个新的图像,包含原图像和指定大小的填充new_width = width + 2 * paddingnew_height = height + 2 * paddingexpanded_image = Image.new("RGB", (new_width, new_height), color=(0, 0, 0))# 将原图像粘贴到新图像的中间expanded_image.paste(image, (padding, padding))return expanded_image# 图像路径
image_path = r"D:\My Data\Figure\下载.jpg"
# 填充大小
padding = 50# 扩充图像
expanded_image = expand_image(image_path, padding)# 保存扩充后的图像
output_path = r"D:\My Data\Figure\扩充.jpg"
expanded_image.save(output_path)# 提示保存成功
print("扩充后的图像已保存到:", output_path)

扩充后的图像,大小为(399, 300, 3)

 然后我们处理扩充后的图像,去掉周围的0像素。

import numpy as np
from PIL import Image
from matplotlib import pyplot as pltdef trim_image(image_path):# 打开图像image = Image.open(image_path)# 转换为numpy数组image_array = np.array(image)# 找到非零像素的边界non_zero_indices = np.nonzero(image_array)min_row = np.min(non_zero_indices[0])max_row = np.max(non_zero_indices[0])min_col = np.min(non_zero_indices[1])max_col = np.max(non_zero_indices[1])# 裁剪图像cropped_image_array = image_array[min_row:max_row + 1, min_col:max_col + 1]# 将裁剪后的数组转换为图像#cropped_image = Image.fromarray(cropped_image_array)cropped_image = np.array(cropped_image_array)return cropped_image# 图像路径
image_path = r"D:\My Data\Figure\扩充.jpg"image = np.array(Image.open(image_path))
# 调用函数裁剪图像
cropped_image = trim_image(image_path)print(image.shape)
print(cropped_image.shape)# 显示裁剪后的图像和原图像
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimSun']# 创建一个包含四个子图的画布
# 创建一个包含四个子图的画布
fig, axes = plt.subplots(1, 2)# 第一张子图:原始图像
axes[0].imshow(image)
axes[0].set_title('原始图像')
axes[0].axis('off')# 第二张子图:插值后的图像
axes[1].imshow(cropped_image)
axes[1].set_title('去除周围的0像素')
axes[1].axis('off')# 调整布局,防止标题重叠
plt.tight_layout()# 展示图像
plt.show()

 去除后的图像大小为(304, 208, 3), 可见我们确实将周围的0像素去除掉了,但是周围还是有黑边,说明去掉的还是不够好。

这篇关于去除图像周围的0像素,调整大小的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/926546

相关文章

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

PDFQFZ高效定制:印章位置、大小随心所欲

前言 在科技编织的快节奏时代,我们不仅追求速度,更追求质量,让每一分努力都转化为生活的甜蜜果实——正是在这样的背景下,一款名为PDFQFZ-PDF的实用软件应运而生,它以其独特的功能和高效的处理能力,在PDF文档处理领域脱颖而出。 它的开发,源自于对现代办公效率提升的迫切需求。在数字化办公日益普及的今天,PDF作为一种跨平台、不易被篡改的文档格式,被广泛应用于合同签署、报告提交、证书打印等各个

【CSS in Depth 2 精译_024】4.2 弹性子元素的大小

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已