python opencv cv2在图片中画mask掩码/掩膜

python opencv cv2在图片中画mask掩膜

import cv2
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

mask_threth = 50

img = cv2.imread('./1.jpg') #自己qq截图一张图片就行,要大于下面的坐标点

# binary mask
coordinates = []
coordinate1 = [[[40, 135], [168,132], [164,330], [2,328]]]
coordinate2 = [[[300, 300], [600,300], [600,600], [300,600]]]
coordinate1 = np.array(coordinate1)
coordinate2 = np.array(coordinate2)
coordinates.append(coordinate1)
coordinates.append(coordinate2)
mask = np.zeros(img.shape[:2], dtype=np.int8)
mask = cv2.fillPoly(mask, coordinates, 255)
cv2.imwrite('./mask1.png', mask)

bbox_mask = mask
color_mask = np.array([0, 0, 255], dtype=np.uint8)
bbox_mask = bbox_mask.astype(np.bool)
# cv2.imwrite('./bbox_mask.png', bbox_mask)

img[bbox_mask] = img[bbox_mask] + color_mask * 0.5
img = img[:,:,::-1]
plt.imshow(img)
# plt.savefig('./result.png')
plt.show()

结果如图所示:
在这里插入图片描述

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenCV 中,可以通过掩码mask)来实现图像的裁剪。掩码是一张与原图像大小相同的二值图像,取值为 0 或 255,其中取值为 255 的像素表示裁剪后要保留的部分,取值为 0 的像素表示裁剪后要舍弃的部分。下面给出一个示例代码,演示如何使用掩码进行图像的裁剪。 ```python import cv2 import numpy as np # 读取原图像和掩码 img = cv2.imread('image.jpg') mask = cv2.imread('mask.jpg', cv2.IMREAD_GRAYSCALE) # 将掩码转换为二值图像 mask = cv2.threshold(mask, 0, 255, cv2.THRESH_BINARY)[1] # 对原图像应用掩码 img_masked = cv2.bitwise_and(img, img, mask=mask) # 寻找最小外接矩形 contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) rect = cv2.boundingRect(contours[0]) # 裁剪图像 img_cropped = img_masked[rect[1]:rect[1]+rect[3], rect[0]:rect[0]+rect[2]] # 显示原图像和裁剪后的图像 cv2.imshow('Original Image', img) cv2.imshow('Cropped Image', img_cropped) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上面的代码中,`cv2.imread` 函数用于读取原图像和掩码。由于掩码是灰度图像,因此需要使用 `cv2.IMREAD_GRAYSCALE` 参数读取。接着使用 `cv2.threshold` 函数将掩码转换为二值图像。然后使用 `cv2.bitwise_and` 函数对原图像应用掩码,得到一个掩码后的图像。接着使用 `cv2.findContours` 函数寻找掩码中的轮廓,然后使用 `cv2.boundingRect` 函数寻找最小外接矩形,即包围所有轮廓的矩形。最后使用 NumPy 数组索引操作裁剪图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值