【问题标题】:Perform object recognition based on colour基于颜色执行对象识别
【发布时间】:2017-08-25 16:06:44
【问题描述】:

我已经捕获了视频的每一帧。然后我使用背景减法来消除背景。现在我有了带有边界框的人。我必须将这个人的颜色特征与他的特征进行比较另一个视频中的同一个人。该人将在每个视频中穿着相同的衣服。 我正在 opencv 2.4python 2.7

中开发这个

这里是我使用的背景减法代码:

import numpy as np
import cv2
cap = cv2.VideoCapture('test.mp4')
fgbg = cv2.BackgroundSubtractorMOG()
j=0
count = int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT))
while j<count:
    ret, frame = cap.read()
    cmask = fgbg.apply(frame)
    fgmask = cmask.copy()
    floodfill =cmask.copy()

    (cnts, _) = cv2.findContours(cmask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    cnts = sorted(cnts, key = cv2.contourArea, reverse = True)
    if(len(cnts)!=0):
        h, w = floodfill.shape[:2]
        mask = np.zeros((h+2, w+2), np.uint8)
        cv2.floodFill(floodfill, mask, (0,0), 255)
        floodfill_inv = cv2.bitwise_not(floodfill)
        fgmask=fgmask|floodfill_inv

    # screenCnt = None
    print "K="+str(j)
    j+=1
    for cnt in cnts:
        x,y,w,h = cv2.boundingRect(cnt)
        cv2.rectangle(fgmask,(x,y),(x+w,y+h),255,4)
    if(len(cnts)!=0):
        cv2.imshow('frame',fgmask)

    k = cv2.waitKey(30) & 0xff

    if k == 27:
        break
cap.release()
cv2.destroyAllWindows()

有什么方法可以根据颜色比较对象吗?

我没有使用人脸识别,因为我没有视频中的人的照片

任何帮助将不胜感激

【问题讨论】:

  • 你见过this吗?
  • 另外,如果你有一个帧的颜色,并且你想在另一个帧中匹配相同的颜色,不是很简单吗?

标签: python python-2.7 opencv image-processing


【解决方案1】:

您可以尝试提取图像的“平均”颜色,因为连衣裙会对整个图像的色调产生很大影响(因为您提取了它,所以它构成了图像的大部分)。

但是,根据照明条件和您从图像中提取人物的方式,这些值可能会不时发生变化。因此,这很可能不是最安全的方法,尤其是当这些人的衣服颜色相似时。但你可以试一试。

您可以使用以下代码提取图像的平均颜色(您可以将其应用于提取的图像):

# Get the average color values of each row in an array
average_row_color = numpy.average(input_img, axis=0)
# Now get the average of that array to get the overall average image color
average_image_color = numpy.average(average_row_color, axis=0)
# Convert it to uint8 to get your 3 channel color values, like [100, 150, 200]
average_color_uint8 = numpy.uint8(average_image_color)

然后,您可以比较您的结果,看看它们与您在其他视频中找到的颜色有多接近,并匹配最接近的颜色。

【讨论】:

    【解决方案2】:

    我会考虑在彩色图像上使用模板匹配进行匹配。

    如果适用,另一个选项是使用基于特征的方法(SIFT 等)提取和匹配特征。最佳选择。

    另一个选项(一种快捷方式)是计算 blob 之间的直方图,找到最常见的颜色,而不是匹配 HSV 颜色空间上的颜色。

    祝你好运

    【讨论】:

      【解决方案3】:

      你想要的是Swain and Ballard's Color Indexing技术。

      基本上,您创建一个颜色直方图来表示对象/人。使用直方图中的信息,您可以创建另一个图像的概率质量函数,该函数表示对象位于某个点的概率。 Here's a python/opencv tutorial that explains how to do the back projection. 概率质量函数的峰值是您的对象/人最可能的位置。

      如果您只是想比较两个已知对象,您可能不需要进行反投影。这是一个previous question about ways to compare color histograms,它将为您提供一些选择。

      如果您的视频有显着的光照变化,您可能无法单独使用此技术获得所需的结果,但其他人想出了一种方法来将颜色恒定性引入该方法。你use a histogram of color ratios,而不是使用颜色直方图。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-08
      • 2022-08-21
      • 2023-03-08
      • 2011-12-18
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 2015-10-05
      相关资源
      最近更新 更多