聚作物图像python:如何更改蒙版颜色

问题描述

我正在裁剪带有多边形数组的图像,但是我需要将旋转的蒙版颜色更改为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)