问题描述
我正在裁剪带有多边形数组的图像,但是我需要将旋转的蒙版颜色更改为PINK,以便另一个程序将其识别为蒙版。该怎么做?
import numpy as np
import cv2
import time
img = cv2.imread("teste3.jpg")
start=time.time()
height = img.shape[0]
width = img.shape[1]
mask = np.zeros((height,width),dtype=np.uint8)
points = np.array([[[692,71],[1386,[1617,520],817],[495,[692,520]]])
cv2.fillpoly(mask,points,(255))
res = cv2.bitwise_and(img,img,mask = mask)
rect = cv2.boundingRect(points) # returns (x,y,w,h) of the rect
cropped = res[rect[1]: rect[1] + rect[3],rect[0]: rect[0] + rect[2]]
print(time.time() - start)
cv2.imshow("cropped",cropped )
cv2.waitKey(0)
解决方法
两种方式:
-
numpy条件表达式(在35毫秒内完成):
pink = (255,255) res = img.copy() res[mask==0] = pink
-
cv2 split + bitwises + merge(在20毫秒内完成):
pink = (255,255) whitesheet = np.full_like(mask,255) mask_inv = cv2.bitwise_not(mask) channels = cv2.split(img) for i in range(len(channels)): a = cv2.bitwise_and(whitesheet,channels[i],mask=mask) b = cv2.bitwise_and(whitesheet,pink[i],mask=mask_inv) channels[i] = cv2.bitwise_or(a,b) res = cv2.merge(channels)