用NumPy、Skimage和Matplotlib:从灰蓝图到黄红图再到二值图的图像转换实现
为了完成这个任务,我们将首先使用NumPy来创建和修改图像数据,然后使用scikit-image(`skimage`)来转换颜色并应用二值化,最后使用matplotlib来显示结果。以下是完整的Python代码示例: ```python import numpy as np import matplotlib.pyplot as plt from skimage.color import rgb2gray from skimage.filters import threshold_otsu from skimage.color import rgb2hsv, hsv2rgb # 创建一个600x600的图像,为灰色,中间300x300为蓝色 image = np.zeros((600, 600, 3), dtype=np.uint8) image[:, :] = [127, 127, 127] # 灰色 image[150:450, 150:450] = [0, 0, 255] # 蓝色中心 # 将灰色变为黄色,蓝色变为红色 # 这里我们先将RGB转换到HSV空间,修改颜色后再转换回RGB hsv_image = rgb2hsv(image) hsv_image[:, :, 1:] = np.where(hsv_image[:, :, 0] < 0.05, # 蓝色区域 np.stack([hsv_image[:, :, 1], 1, 1], axis=-1), # 红色HSV hsv_image[:, :, 1:]) hsv_image[:, :, 1:] = np.where(hsv_image[:, :, 0] > 0.5, # 灰色区域 np.stack([hsv_image[:, :, 0], 1, 1], axis=-1), # 黄色HSV,简化处理 hsv_image[:, :, 1:]) modified_image = hsv2rgb(hsv_image) # 将图像转为灰度图,并应用Otsu方法进行二值化 gray_image = rgb2gray(modified_image) thresh = threshold_otsu(gray_image) binary_image = gray_image > thresh # 将二值化图像中间为白,周围为黑(这里已经是这种形式了,但为了明确,我们可以反转) # 注意:这里的二值化已经自动处理了这一点,因为Otsu阈值会基于图像内容自动选择 # 如果需要显式地反转,可以使用 `binary_image = ~binary_image` # 显示结果 plt.figure(figsize=(10, 5)) plt.subplot(1, 2, 1) plt.imshow(modified_image) plt.title('Modified Image (Yellow and Red)') plt.axis('off') plt.subplot(1, 2, 2) plt.imshow(binary_image, cmap='gray') plt.title('Binary Image (Otsu Thresholding)') plt.axis('off') plt.show() ``` 注意点: 1. 颜色替换:为了替换颜色,我们将RGB图像转换到HSV空间,因为HSV空间对于颜色的修改更为直观。我们检查H(色调)值来识别蓝色和灰色区域,并相应地修改S(饱和度)和V(亮度)值。对于黄色,我们简单地将饱和度和亮度设为最大值,因为HSV到RGB的转换不完全是线性的,所以这不是完美的黄色。 2. 二值化:我们使用Otsu方法自动确定阈值,该方法基于图像的直方图来找到最佳阈值,从而将图像分割为前景和。由于图像的中心部分是红色的,并且亮度较高,Otsu阈值很可能将中心部分视为前景(白色),而其余部分视为(黑色)。 3. 显示图像:我们使用matplotlib来显示修改后的图像和二值化图像。 ######[AI写代码神器 | 851点数解答 | 2024-10-17 10:36:01]
- Flask代理FastGPT API代码分析:问题剖析与全面改进建议 (DeepSeek | 713点数解答 | 2025-06-18 16:00:34)212
- 轻松搞定!Numpy 1.26.4 版本成功安装(讯飞星火 | 25点数解答 | 2024-06-07 15:27:06)282
- Python与HTML+JavaScript实现3D粒子爱心动画:代码剖析与开发要点(字节豆包 | 1487点数解答 | 2025-08-07 11:24:56)152
- Python 用 Matplotlib 和 NumPy 绘制 3D 爱心动画:开发要点与注意事项(DeepSeek | 130点数解答 | 2025-08-29 21:24:33)150
- 用 NumPy 与 Scikit-learn 实现线性回归:模拟数据、训练模型、评估与可视化全流程(阿里通义 | 651点数解答 | 2025-06-12 13:18:59)122
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)344
- Python 实战:读取文件、数据探查与用户支付方式饼图前期准备(字节豆包 | 81点数解答 | 2024-10-24 10:38:10)327
- Python 代码转 C 代码:从读取 pcap 文件示例看跨语言转换挑战与实践(字节豆包 | 486点数解答 | 2024-10-29 15:57:32)272
- Python代码秒变C代码:手把手教你转换PCAP文件读取代码(阿里通义 | 1016点数解答 | 2024-10-29 16:00:17)330
- Python 实战:读取文件、数据探查与支付状态统计可视化代码解析与修正(字节豆包 | 296点数解答 | 2024-10-31 08:56:30)316
- Python 实战:读取文件、数据探查与支付状态可视化分析(字节豆包 | 31点数解答 | 2024-10-31 08:58:19)279
- Python 轻松处理教学、后勤、行政账目数据:提取年份新操作 (字节豆包 | 69点数解答 | 2024-10-31 17:39:14)284