我从图像中提取了一个对象,所以现在我有 a masked image with a tennis ball and a black background .
我想通过直方图单独从网球中提取颜色特征。这是我到目前为止的代码,但是从直方图的外观来看,黑色背景支配着任何其他颜色,这使得直方图无效:
from PIL import Image
from pylab import *
# Import image and convert to gray
image = Image.open("res_300.png")
im = image.convert('L')
im_array = array(im)
# Create a new figure
figure()
gray()
# Show contours with origin upper left corner
contour(im, origin='image')
axis('equal')
axis('off')
# Create histogram
figure()
hist(im_array.flatten(), 128)
show()
有没有办法在忽略黑色背景的情况下根据网球 BGR 颜色特征绘制直方图?
我是一个python菜鸟。谢谢。
要将颜色 channel 拆分为BGR
,我们可以使用cv2.split()
然后使用cv2.calcHist()
用直方图提取颜色特征。要删除占主导地位的黑色背景,我们可以将范围设置为 [1, 256]
。
from matplotlib import pyplot as plt
import cv2
image = cv2.imread('1.png')
channels = cv2.split(image)
colors = ("b", "g", "r")
plt.figure()
plt.title("Color Histogram")
plt.xlabel("Bins")
plt.ylabel("# of Pixels")
features = []
# Loop over the image channels (B, G, R)
for (channel, color) in zip(channels, colors):
# Calculate histogram
hist = cv2.calcHist([channel], [0], None, [255], [1, 256])
features.extend(hist)
# Plot histogram
plt.plot(hist, color = color)
plt.xlim([0, 256])
plt.show()
我是一名优秀的程序员,十分优秀!