利用opencv进行掩膜操作详解,保证看完就会(python)

有时我们需要给一张图片添加logo,例如下图这样(图片来源):
给图片添加logo

1.掩膜操作思路

它的思想是:

  1. 先将彩色图像转换为灰度图,然后利于阈值将图像二值化,变成非黑即白的形式,这样logo的蒙版就做好来了(学过PS的人应该很容易理解);
  2. 蒙版中黑色的区域表示删除掉该区域像素,白色表示保留该区域像素。黑色是0,白色是255
  3. 所以利用二值化得到的蒙版(掩膜)是剔除logo区域的。反之,是用来提出logo上的多余区域的;
  4. 如何剔除掉小姐姐照片中的logo区和logo上的空白区域呢,用cv2.bitwise_and方法。因为0(黑色)与非0数and后为0,这样就可以把该区域剔除啦;
  5. 最后,将logo补到小姐姐照片上就可以了。

2.掩膜操作完整代码

以下是实现这一操作的完整代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt 

img1 = cv2.imread('person.jpg')
img2 = cv2.imread('logo.jpg')

rows, cols, channels = img2.shape  # 获取图像2的属性
roi = img1
### 使用 OpenCV 在 C++ 中实现 HSV 掩膜 为了在 C++ 中通过 OpenCV 库创建并应用 HSV 掩膜,可以遵循以下方法。此过程涉及将输入图像的颜色空间从 BGR 转换到 HSV,并定义特定颜色范围来构建掩膜。 #### 将图像转换为 HSV 颜色空间 首先,加载一幅彩色图片并将它由默认的BGR格式转成HSV格式[^2]: ```cpp cv::Mat srcImage = cv::imread("path_to_image"); if (srcImage.empty()) { std::cerr << "Could not open or find the image!" << std::endl; } // Convert from BGR to HSV color space. cv::Mat hsvImage; cv::cvtColor(srcImage, hsvImage, cv::COLOR_BGR2HSV); ``` #### 定义目标颜色范围 接着设定想要检测的目标颜色上下限,在这里以蓝色为例设置阈值区间: ```cpp // Define lower and upper bounds of blue color in HSV format. cv::Scalar lowerBlue(100, 150, 0); cv::Scalar upperBlue(140, 255, 255); ``` #### 创建掩膜并与原图相乘显示结果 最后利用 `inRange` 函数生成二值化掩码图像,再将其应用于原始彩图上查看效果: ```cpp // Create a mask where only pixels within our defined range are white while others remain black. cv::Mat mask; cv::inRange(hsvImage, lowerBlue, upperBlue, mask); // Apply this binary mask on original colored picture so that we can see which part has been selected by masking operation. cv::Mat result; srcImage.copyTo(result, mask); // Display images using namedWindow() function along with imshow(). cv::namedWindow("Original Image", cv::WINDOW_AUTOSIZE); cv::imshow("Original Image", srcImage); cv::namedWindow("Masked Image", cv::WINDOW_AUTOSIZE); cv::imshow("Masked Image", result); cv::waitKey(0); // Wait indefinitely until key press event occurs. ``` 上述代码展示了如何基于指定的颜色范围(本例中为蓝色),使用OpenCV库中的基本功能完成简单的HSV掩膜操作。这有助于提取具有相似色调的对象或区域,对于计算机视觉任务非常有用。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值