我正在尝试使用OpenCV 3在给定的蒙版中为图像添加颜色。
这是一张只有两个像素的行的简化,可复制版本:
import numpy as np
import cv2 as cv
img = np.array([[[0, 0, 0], [0,0,0]]], "uint8")
color = np.array([ 30, 50, 50], "uint8")
mask = np.array([[255, 0]], "uint8")
cv.add(img, color, img, mask=mask)
会产生以下错误:
(-215:Assertion failed) type2 == 6 && (sz2.height == 1 || sz2.height == 4) in function 'cv::arithm_op'
我认为错误的原因是颜色既不是与原始图像大小相同的图像,也不是标量。
事实上,如果我使用它,它就可以正常工作
import numpy as np
import cv2 as cv
img = np.array([[[0, 0, 0], [0,0,0]]], "uint8")
color = np.array([ 30, 50, 50], "uint8")
color_img = np.full_like(img, color) # create full image with a single color
mask = np.array([[255, 0]], "uint8")
cv.add(img, color_img, img, mask=mask)
,但是创建具有相同像素的color_img
只是求和img
似乎是浪费。有没有一种方法可以将颜色直接加到img
的每个像素上?
答案 0 :(得分:3)
您可以使用Numpy做到这一点:
import numpy as np
import cv2 as cv
img = np.array([[[0, 0, 0], [0,0,0]]], dtype=np.uint8)
color = np.array([ 30, 50, 50], dtype=np.uint8)
mask = np.array([[255, 0]], dtype=np.uint8)
# Set pixels in "img" to "color" wherever "mask" > 0
img[mask>0] = color
结果
array([[[30, 50, 50],
[ 0, 0, 0]]], dtype=uint8)