python opencv 根据宽高创建mask图片
时间: 2023-09-29 16:06:41 浏览: 47
可以使用NumPy库创建一个全零矩阵,然后在指定的宽高范围内将矩阵的像素值修改为1或255,从而得到一个mask图片。
下面是一个示例代码,其中宽为100,高为200:
```
import numpy as np
import cv2
width = 100
height = 200
mask = np.zeros((height, width), dtype=np.uint8)
mask[50:150, 25:75] = 255
cv2.imshow('Mask Image', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这个代码会创建一个200x100的全零矩阵,然后将其第50到150行、第25到75列的像素值设置为255,最后显示这个mask图片。
相关问题
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方法。
python opencv 根据mask 抠图 bgra
使用OpenCV可以根据mask抠出bgra图像中的感兴趣区域。下面是一个简单的示例代码:
```python
import cv2
import numpy as np
# 读取bgra图像和mask
img = cv2.imread('input.png', cv2.IMREAD_UNCHANGED)
mask = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE)
# 将mask转为三通道
mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
# 将mask中不为0的部分取反
mask_inverse = cv2.bitwise_not(mask)
# 将原图和mask分别与mask_inverse做与运算和或运算
foreground = cv2.bitwise_and(img, mask)
background = cv2.bitwise_and(img, mask_inverse)
# 将前景和背景叠加
result = cv2.add(foreground, background)
# 显示结果
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例中,我们首先读取了bgra图像和mask,然后将mask转为三通道,因为原始的mask是单通道的。接下来,我们将mask中不为0的部分取反,得到mask的补集。然后,我们将原图和mask分别与mask_inverse做与运算和或运算,得到前景和背景。最后,将前景和背景叠加,得到结果。