我正在尝试为我的项目工作实现二进制分段,但我对二进制分段代码感到困惑。我只想在图片中获得播放器和背景的连续分段 this 图片(手的正确分割)。
imgort numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('main-qimg-f32bfc3d08d8809a8b3bb7d91c5d183d.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, thresh =
cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
%pylab inline
import matplotlib.image as mpimg
imgplot_0 = plt.imshow(img)
plt.show()
imgplot = plt.imshow(thresh)
plt.show()
但是这段代码最终给了我this图片。原始图像和运行上述代码后将获得的图像。
正如您所看到的,二进制分割并不好。我想从图像中提取玩家的镜头(带玩家)。也许是因为图像中存在噪声和杂散边缘。
我需要在代码中进行哪些更改才能获得正确的细分?
提前致谢!
答案 0 :(得分:0)
你想要达到的目标几乎是不可能的。
仅基于颜色,没有什么可以分辨什么是“玩家的一部分”与“背景的一部分”。图像过于复杂和丰富多彩。
要实现这样的细分,您需要大量关于玩家颜色的可能形状的先验信息。这被称为对象类别检测,仍然是一个开放的研究课题。
相比之下,手部图像要简单百万倍(尽管你可能会怀疑手腕缺失了)。