当前位置: 首页 > news >正文

使用 OpenCV 和 NumPy 进行图像处理:HSV 范围筛选实现PS抠图效果

使用 OpenCV 和 NumPy 进行图像处理:HSV 范围筛选实现PS抠图效果

在计算机视觉和图像处理领域,OpenCV 是一个非常强大的库,能够帮助我们执行各种图像操作。在这篇博客中,我们将通过一个简单的示例演示如何使用 OpenCV 和 NumPy 来进行 HSV(色相、饱和度、明度)范围筛选,以提取图像中的特定颜色区域。

1. 创建虚拟环境

新建文件夹, 并在文件夹中创建虚拟环境,可以使用Vscode打开文件夹, 然后在终端中输入以下命令:

python -m venv venv

2. 激活虚拟环境

在终端中输入以下命令:

venv\Scripts\activate

3. 安装依赖

在终端中输入以下命令:

pip install opencv-python

4. 代码实现

首先,我们需要导入所需的库:

import cv2
import numpy as np

接下来,我们定义一个函数 inrange_demo,该函数接收一幅图像作为参数,并执行以下步骤:

1. 将图像从 BGR 转换为 HSV

OpenCV 默认使用 BGR(蓝、绿、红)颜色空间,因此我们首先需要将图像转换为 HSV 颜色空间,以便更容易地进行颜色范围筛选。

hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
cv2.imshow("hsv", hsv)
cv2.waitKey(0)

2. 创建 HSV 范围的掩膜

我们使用 cv2.inRange 函数来创建一个掩膜,该掩膜只保留在指定 HSV 范围内的像素。这里的范围是 (35, 43, 46)(77, 255, 255),这通常对应于绿色的颜色范围。

mask = cv2.inRange(hsv, (35, 43, 46), (77, 255, 255))
cv2.imshow("mask", mask)
cv2.waitKey(0)

3. 创建黑色背景

我们创建一个与原始图像相同大小的黑色背景,以便后续操作。

redback = np.zeros(image.shape, image.dtype)

4. 反转掩膜

通过 cv2.bitwise_not 函数,我们可以反转掩膜,以便选择不在指定颜色范围内的区域。

mask_inv = cv2.bitwise_not(mask)
cv2.imshow("inverted mask", mask_inv)
cv2.waitKey(0)

5. 确保掩膜是三通道

为了将掩膜应用于原始图像,我们需要将反转后的掩膜扩展到三通道。

mask_inv_3d = mask_inv[:, :, np.newaxis]

6. 应用掩膜并显示结果

最后,我们使用 np.where 函数将原始图像与黑色背景结合,显示出感兴趣区域。

redback[:] = np.where(mask_inv_3d == 255, image, redback)
cv2.imshow("roi区域", redback)

示例用法

在函数定义之后,我们可以通过以下代码读取一幅图像并调用 inrange_demo 函数:

image = cv2.imread("D:\\images\\1.png")
inrange_demo(image)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像素材

在这里插入图片描述

实现效果

在运行代码后,你将看到以下图像:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结

以上代码演示了如何使用 OpenCV 和 NumPy 进行基本的图像处理,特别是 HSV 范围筛选。通过这种方法,我们可以提取图像中感兴趣的颜色区域,并在黑色背景上显示它们。这种技术在物体检测和识别、图像分割等应用中非常有用。

扩展

使用白色背景显示图像特定区域

import cv2
import numpy as npdef inrange_demo(image):# Convert the image from BGR to HSVhsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)cv2.imshow("hsv", hsv)cv2.waitKey(0)# Create a mask for the specified HSV rangemask = cv2.inRange(hsv, (35, 43, 46), (77, 255, 255))cv2.imshow("mask", mask)cv2.waitKey(0)# Create a white backgroundredback = np.zeros(image.shape, dtype=image.dtype)whiteback=redback+255# Invert the maskmask_inv = cv2.bitwise_not(mask)# Show the inverted maskcv2.imshow("inverted mask", mask_inv)cv2.waitKey(0)# Ensure mask_inv is 3-channel by expanding its dimensionsmask_inv_3d = mask_inv[:, :, np.newaxis]# Copy the original image to the background where the mask is appliedwhiteback[:] = np.where(mask_inv_3d == 255, image, whiteback)# Show the region of interestcv2.imshow("roi区域", whiteback)# Example usage:
image = cv2.imread("D:\\images\\1.png")
inrange_demo(image)
cv2.waitKey(0)
cv2.destroyAllWindows()

实现效果

在这里插入图片描述

这里特别提供一下HSV颜色取值范围,建议收藏一下:

HSV 颜色取值范围

在这里插入图片描述

希望这篇博客对你理解图像处理有所帮助!

http://www.lryc.cn/news/431877.html

相关文章:

  • IIS中间件
  • BMP280气压传感器详解(STM32)
  • DWPD指标:为何不再适用于大容量SSD?
  • 路由器的固定ip地址是啥意思?固定ip地址有什么好处
  • Java——踩坑Arrays.asList()
  • 前缀列表(ip-prefix)配置
  • 每日OJ_牛客_电话号码(简单哈希模拟)
  • 鸿蒙轻内核M核源码分析系列十二 事件Event
  • 基于 RocketMQ 的云原生 MQTT 消息引擎设计
  • AWVS/Acunetix Premium V24.8
  • [数据集][目标检测]灭火器检测数据集VOC+YOLO格式3255张1类别
  • 【技术警报】Redis故障启示录:当主节点宕机,如何避免数据“雪崩”?
  • 【基础】Three.js加载纹理贴图、加载外部gltf格式文件
  • 【区块链 + 人才服务】FISCO BCOS 区块链实训和管理平台 | FISCO BCOS应用案例
  • 联众优车持续加大汽车金融服务投入与创新,赋能汽车消费新生态
  • 基于yolov8的西红柿检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • PHP轻量级高性能HTTP服务框架 - webman
  • Python实现人工鱼群算法
  • 【网络安全】密码学概述
  • Java连接SSH
  • 怎么取消MAC 输入首字母总是自动变大写
  • 【无损检测】基于用深度学习的工业超声B-Scan 图像中的焊缝缺陷
  • iOS——GCD再学习
  • SVD降维
  • 剖析Cookie的工作原理及其安全风险
  • 规控面试复盘
  • Elastic Stack--ES集群加密及Kibana的RBAC实战
  • 【开源免费】基于SpringBoot+Vue.JS图书个性化推荐系统(JAVA毕业设计)
  • STM32(F103ZET6)第十九课:FreeRtos的移植和使用
  • 索尼的Web3蓝图:从技术创新到现实应用的全方位布局