如何解决使用Python从图像背景中提取相同颜色的前景
我的图像的前景色和背景色几乎相同
,
我正在尝试使用以下代码提取前景:
import cv2
import numpy as np
import os
from matplotlib import pyplot as plt
# Image dir
IMAGE_NAME = 'RGB_Test'
# Grab path to current working directory
CWD_PATH = os.getcwd()
# Path to image
PATH_TO_IMAGE = os.path.join(CWD_PATH,IMAGE_NAME,'RGB_test.JPG')
# Using cv2.imread() method
img = cv2.imread(PATH_TO_IMAGE)
# convert to RGB
img_color = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
# convert to hsv
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
# Displaying the image
plt.figure("Original")
plt.imshow(img)
plt.figure("RGB")
plt.imshow(img_color)
plt.figure("HSV")
plt.imshow(hsv)
plt.show()
# threshold
r1 = (10,25,130)
r2 = (25,150,255)
mask = cv2.inRange(hsv,r1,r2)
# apply morphology closing and opening to mask
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(7,7))
mask = cv2.morphologyEx(mask,cv2.MORPH_OPEN,kernel)
mask = cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernel)
# make mask 3 channel
mask = cv2.merge([mask,mask,mask])
# invert mask
mask_i = 255 - mask
# apply mask to input
img_mask = cv2.bitwise_and(img,mask)
# combine inverted mask with masked image
r = cv2.add(img_mask,mask_i)
# Displaying the image
plt.figure("Mask")
plt.imshow(mask)
plt.figure("Mask Inv")
plt.imshow(mask_i)
plt.figure("Img_mask")
plt.imshow(img_mask)
plt.figure("Final Results")
plt.imshow(r)
plt.show()
我得到了下面的图像,其中所有对象均未正确遮盖,任何人都可以帮助我解决此问题。
解决方法
仅比色转换几乎不可能实现您要问的问题。蔬菜和地面的色相和饱和度大致相同,肮脏的颜色和颜色...地面。
从我看到的结果来看,亮度或红色分量只有足够的对比度。这就是二值化后的结果。恐怕你不能做得更好。
,您要问的不是不可能的,但是您需要查找很多马铃薯图像并使用Mask-RCNN进行训练。
到目前为止,当前的Mask-RCNN尚未使用土豆图像训练,因此结果不准确:
但是您可以看到网络一次一个地找到单个马铃薯。您需要将更多类似的图片输入网络,以获得准确的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。