python opencv 将图片非感兴趣区域黑白化
时间: 2023-10-06 16:12:22 浏览: 96
以下是使用OpenCV将图片非感兴趣区域黑白化的代码示例:
```python
import cv2
# 读取图片
img cv2.imread('image.jpg')
# 创建一个掩膜
mask = cv2.imread('mask.jpg', 0)
# 获取掩膜的尺寸
height, width = mask.shape
# 将掩膜的尺寸调整为与图片相同
mask = cv2.resize(mask, (img.shape[1], img.shape[0]))
# 将掩膜应用于图片
roi = cv2.bitwise_and(img, img, mask=mask)
# 将非感兴趣区域设置为黑白图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 显示处理后的图像
processed_img = cv2.addWeighted(gray, 1, roi, 0, 0)
cv2.imshow('Processed Image', processed_img)
# 等待按下任意键退出
cv2.waitKey(0)
# 释放资源
cv2.destroyAllWindows()
```
在上面的示例代码中,我们首先读取一张图片,并加载一个掩膜图像。然后,我们将掩膜的尺寸调整为与原图片相同,并将其应用于原图片。接下来,我们将非感兴趣区域设置为黑白图,并显示处理后的图片。最后,我们等待按下任意键退出,并释放资源。请注意,您需要替换示例代码中的图片文件和掩膜图像文件路径,以适应您的应用场景。
相关问题
python opencv 将图片非感兴趣区域去掉颜色,形成黑白图
您可以通过以下步骤将非感兴趣区域去掉颜色,形成黑白图:
1. 加载图像并创建一个掩码,用于标识感兴趣区域和非感兴趣区域。
```python
import cv2
img = cv2.imread('image.jpg')
mask = np.zeros(img.shape[:2], np.uint8)
roi_corners = np.array([[x1,y1],[x2,y2],[x3,y3],[x4,y4]], dtype=np.int32)
ignore_mask_color = (255,) * channel_count
cv2.fillPoly(mask, roi_corners, ignore_mask_color)
```
其中,`x1, y1, x2, y2, x3, y3, x4, y4` 是感兴趣区域的四个顶点坐标,`channel_count` 表示图像通道数量。
2. 将非感兴趣区域的像素值设为灰色。
```python
masked_img = cv2.bitwise_and(img, img, mask=mask)
gray_img = cv2.cvtColor(masked_img, cv2.COLOR_BGR2GRAY)
gray_img = cv2.cvtColor(gray_img, cv2.COLOR_GRAY2BGR)
```
这里使用了 `cv2.bitwise_and()` 函数来将掩码应用到原始图像上,将非感兴趣区域的像素值设为零。然后使用 `cv2.cvtColor()` 函数将结果转换为灰度图像,再使用 `cv2.cvtColor()` 函数将灰度图像转换为 BGR 彩色图像。
3. 将感兴趣区域的颜色保留。
```python
mask_inv = cv2.bitwise_not(mask)
masked_img = cv2.bitwise_and(img, img, mask=mask_inv)
```
这里使用了 `cv2.bitwise_not()` 函数来反转掩码,将感兴趣区域的像素值设为零。然后使用 `cv2.bitwise_and()` 函数将掩码应用到原始图像上,将非感兴趣区域的像素值设为零。
4. 合并感兴趣区域和非感兴趣区域。
```python
result_img = cv2.add(masked_img, gray_img)
```
这里使用了 `cv2.add()` 函数将感兴趣区域和非感兴趣区域合并,得到最终结果。
完整代码如下:
```python
import cv2
import numpy as np
# Load image
img = cv2.imread('image.jpg')
# Create mask
mask = np.zeros(img.shape[:2], np.uint8)
roi_corners = np.array([[x1,y1],[x2,y2],[x3,y3],[x4,y4]], dtype=np.int32)
ignore_mask_color = (255,) * channel_count
cv2.fillPoly(mask, roi_corners, ignore_mask_color)
# Apply mask to image
masked_img = cv2.bitwise_and(img, img, mask=mask)
# Convert non-masked region to grayscale
gray_img = cv2.cvtColor(masked_img, cv2.COLOR_BGR2GRAY)
gray_img = cv2.cvtColor(gray_img, cv2.COLOR_GRAY2BGR)
# Remove color from masked region
mask_inv = cv2.bitwise_not(mask)
masked_img = cv2.bitwise_and(img, img, mask=mask_inv)
# Combine masked region and non-masked region
result_img = cv2.add(masked_img, gray_img)
# Display result
cv2.imshow('Result', result_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
python opencv 根据宽高生成mask 将图片非感兴趣区域去掉颜色,形成黑白图
可以使用OpenCV中的cv2.rectangle方法生成mask,然后将mask应用于原始图像即可。
以下是示例代码:
```python
import cv2
import numpy as np
# 读取原始图像
img = cv2.imread('image.jpg')
# 预设宽高
width, height = 300, 400
# 生成mask,将感兴趣区域设为白色,其余部分设为黑色
mask = np.zeros(img.shape[:2], dtype=np.uint8)
mask[0:height, 0:width] = 255
# 应用mask,将非感兴趣区域设为黑色
masked_img = cv2.bitwise_and(img, img, mask=mask)
# 转换为灰度图
gray_img = cv2.cvtColor(masked_img, cv2.COLOR_BGR2GRAY)
# 二值化处理,形成黑白图
_, bw_img = cv2.threshold(gray_img, 1, 255, cv2.THRESH_BINARY)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Mask', mask)
cv2.imshow('Masked Image', masked_img)
cv2.imshow('Black and White Image', bw_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,我们读取了一张名为“image.jpg”的图像,并设定了宽300和高400。然后,我们使用cv2.rectangle方法生成了一个mask,将感兴趣的区域设为白色,其余部分设为黑色。接着,我们将mask应用于原始图像,将非感兴趣区域设为黑色,并将结果转换为灰度图。最后,我们使用cv2.threshold方法对灰度图进行二值化处理,形成黑白图,并将结果显示出来。
注意,这个示例中,我们使用了cv2.rectangle方法生成了一个矩形的mask,如果需要生成其他形状的mask,可以使用其他的OpenCV方法。
阅读全文
相关推荐
















