从图像OpenCV Python中删除掩码
我可能有点过调了,但我尝试使用从我的图像生成的遮罩,并从主图像中减去它。我非常愿意提取字符,但不确定如何收集整个蓝色样本,我还没有正确的平衡 这与我试图实现的目标正好相反 基础图像 使用hsv边界的遮罩,然后将其反转以更好地显示它 使其变暗 我现在想把这个面具从主图像中移除从图像OpenCV Python中删除掩码,python,opencv,Python,Opencv,我可能有点过调了,但我尝试使用从我的图像生成的遮罩,并从主图像中减去它。我非常愿意提取字符,但不确定如何收集整个蓝色样本,我还没有正确的平衡 这与我试图实现的目标正好相反 基础图像 使用hsv边界的遮罩,然后将其反转以更好地显示它 使其变暗 我现在想把这个面具从主图像中移除 import cv2 import numpy as np import random as rng from PIL import Image from PIL import ImageOps from utils
import cv2
import numpy as np
import random as rng
from PIL import Image
from PIL import ImageOps
from utils import helper
image_name = 'capt13.jpg'
img = cv2.imread(image_name)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_red = np.array([0,120,70])
upper_red = np.array([10,255,255])
lower_mask = cv2.inRange(hsv, lower_red, upper_red)
lower_red = np.array([160,120,70])
upper_red = np.array([180,255,255])
upper_mask = cv2.inRange(hsv, lower_red, upper_red)
'''
lower_blue = np.array([80,40,30])
upper_blue = np.array([140,255,255])
lower_mask = cv2.inRange(hsv, lower_blue, upper_blue)
lower_blue = np.array([240,220,200])
upper_blue = np.array([360,255,255])
upper_mask = cv2.inRange(hsv, lower_blue, upper_blue)
'''
mask = lower_mask + upper_mask
res_lines = cv2.bitwise_and(img,img, mask= mask)
# Keep the inverted
image = Image.fromarray(res_lines)
image.save('res.png')
inverted = ImageOps.invert(image)
inverted = inverted.convert('L')
inverted.save('inverted.png')
binary = np.array(inverted)
for row in range(len(binary)):
for col in range(len(binary[row])):
if binary[row][col] != 255:
binary[row][col] = 0
binary_image = Image.fromarray(binary)
binary_image.save('binary.png')
提取蓝色(如上所述,我愿意为此找到更好的解决方案)
使用hsv边界的遮罩,然后将其反转
使其变暗
如果两幅图像的大小相同,则直接减法有效:
im = cv2.imread("image.png")
mask = cv2.imread("mask.png")
diff_im = im - im2
或者,您可以使用OpenCV的内置减法,它执行元素级减法:
diff_im = cv2.subtract(im, im2)
最后,您还应该尝试absdiff
,因为它会将负结果转换为零,这可能是您想要的
diff_im = cv2.absdiff(im, im2)
好的,那么问题是什么呢?“我正在尝试使用从我的图像生成的遮罩,并从主图像中减去它。”