Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于颜色执行对象识别_Python_Python 2.7_Opencv_Image Processing - Fatal编程技术网

Python 基于颜色执行对象识别

Python 基于颜色执行对象识别,python,python-2.7,opencv,image-processing,Python,Python 2.7,Opencv,Image Processing,我已经捕获了视频的每一帧。然后我使用背景减法来消除背景。现在我有了带边框的人。我必须将这个人的颜色特征与另一个视频中同一个人的特征进行比较。每个视频中的人都会穿着相同的衣服。 我正在opencv 2.4和python 2.7中开发这个 这里是我使用的背景减法代码: import numpy as np import cv2 cap = cv2.VideoCapture('test.mp4') fgbg = cv2.BackgroundSubtractorMOG() j=0 count = int

我已经捕获了视频的每一帧。然后我使用背景减法来消除背景。现在我有了带边框的人。我必须将这个人的颜色特征与另一个视频中同一个人的特征进行比较。每个视频中的人都会穿着相同的衣服。 我正在opencv 2.4和python 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()
将numpy导入为np
进口cv2
cap=cv2.VideoCapture('test.mp4'))
fgbg=cv2.BackgroundSubtractorMOG()
j=0
count=int(cap.get(cv2.cv.cv\u cap\u PROP\u FRAME\u count))

虽然j您可以尝试提取图像的“平均”颜色,因为裙子会对整个图像的颜色阴影产生很大影响(因为您提取了它,它构成了图像的大部分)

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

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


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

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

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

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


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

> P>在彩色图像上考虑模板匹配。p> 如果适用,另一种选择是使用基于特征的方法(SIFT、ect)提取和匹配特征。最好的选择

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


运气> < P> > P>我考虑在彩色图像上使用模板匹配。p> 如果适用,另一种选择是使用基于特征的方法(SIFT、ect)提取和匹配特征。最好的选择

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

祝你好运,你需要的是技巧

基本上,您可以创建一个颜色直方图来表示对象/人。使用直方图中的信息,可以创建另一个图像的概率质量函数,该函数表示某个对象在某个点的概率。 概率质量函数的峰值是物体/人最可能的位置

如果只是尝试比较两个已知对象,则可能不需要进行反投影。这里有一个可以给你一些选择的例子

如果你的视频有显著的光照变化,你可能无法单独使用这项技术获得所需的结果,但有人想出了一种方法,将颜色恒定性引入到该方法中。你需要的不是颜色直方图,而是技术

基本上,您可以创建一个颜色直方图来表示对象/人。使用直方图中的信息,可以创建另一个图像的概率质量函数,该函数表示某个对象在某个点的概率。 概率质量函数的峰值是物体/人最可能的位置

如果只是尝试比较两个已知对象,则可能不需要进行反投影。这里有一个可以给你一些选择的例子


如果你的视频有显著的光照变化,你可能无法单独使用这项技术获得所需的结果,但有人想出了一种方法,将颜色恒定性引入到该方法中。你没有使用颜色直方图,而是看到了吗?

另外,如果你有一帧的颜色,并且你想在另一帧中与相同的颜色匹配,不是很直接吗?你看到了吗?另外,如果你有一帧的颜色,并且你想在另一帧中与相同的颜色匹配,不是很简单吗?我认为直方图相交是比较直方图的最佳选择。对于这种情况,它既简单又有效。我认为直方图相交是比较直方图的最佳选择。对于这种情况,它既简单又有效。看见
# 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)