wordpress建好本地站怎么上传,网页转app工具,哈尔滨网站建设方案外包,新手设计师接单网站使用 OpenCV 和 NumPy 进行图像处理#xff1a;HSV 范围筛选实现PS抠图效果
在计算机视觉和图像处理领域#xff0c;OpenCV 是一个非常强大的库#xff0c;能够帮助我们执行各种图像操作。在这篇博客中#xff0c;我们将通过一个简单的示例演示如何使用 OpenCV 和 NumPy 来…使用 OpenCV 和 NumPy 进行图像处理HSV 范围筛选实现PS抠图效果
在计算机视觉和图像处理领域OpenCV 是一个非常强大的库能够帮助我们执行各种图像操作。在这篇博客中我们将通过一个简单的示例演示如何使用 OpenCV 和 NumPy 来进行 HSV色相、饱和度、明度范围筛选以提取图像中的特定颜色区域。
1. 创建虚拟环境
新建文件夹, 并在文件夹中创建虚拟环境,可以使用Vscode打开文件夹, 然后在终端中输入以下命令:
python -m venv venv2. 激活虚拟环境
在终端中输入以下命令:
venv\Scripts\activate3. 安装依赖
在终端中输入以下命令:
pip install opencv-python4. 代码实现
首先我们需要导入所需的库
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, dtypeimage.dtype)whitebackredback255# 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 颜色取值范围 希望这篇博客对你理解图像处理有所帮助