Python比较哪个RGB值具有图像中最多的像素

时间:2018-05-02 02:54:30

标签: python opencv

所以我正在使用openCV,我正在获取RGB值列表,将它们与图像中的一系列像素进行比较,然后从列表中返回哪个RGB值最多。我有一个名为colorCalc.py和face.py的文件。 ColorCalc只是方法,而face使用Colorcalc.py中的方法。我的主要问题是使用colorCheck函数,似乎第一个if语句似乎没有检查,因为它总是正确的,它基于colorCheck计算的数字,它不应该。 face.py脚本也包括在内,以防有人想复制我所做的事情。以下是ColorCalc.py

def colorArray():
colArr=[[0 for x in range(3)] for y in range(12)]
#these colors are from darkest to lightest skin tone. The number at the end is to tell which value we are considering after sorting
#black skin
colArr[0]=[117,85,61,0]
colArr[1]=[159,136,121,1]
#bronze Skin
colArr[2]=[156,115,69,2]
colArr[3]=[182,157,69,3]
#medium brown skin
colArr[4]=[196,142,88,4]
colArr[5]=[217,181,149,5]
#light brown skin
colArr[6]=[220,180,119,6]
colArr[7]=[236,195,155,7]
#cream-colored skin
colArr[8]=[230,189,149,8]
colArr[9]=[239,210,180,9]
#pale skin
colArr[10]=[231,207,183,10]
colArr[11]=[240,222,205,11]

colArr= numpy.asarray(colArr)
return colArr

def colorDifference(r,g,b,r1,g1,b1):
red= abs((r-r1)**2)
blue= abs((b-b1)**2)
green= abs((g-g1**2))
answer=math.sqrt(red+blue+green)

return answer;

这只是创建我要比较的数组而下一个函数比较RGB值

    import numpy as np
    import cv2 as cv
    import math
    import colorCalc as col

    #load xml files
    face_cascade = cv.CascadeClassifier('C:\Program 
    Files\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml')
    eye_cascade = cv.CascadeClassifier('C:\Program 
    Files\opencv\sources\data\haarcascades\haarcascade_eye.xml')

#define image and convert to grayscale
pic= cv.imread('face.jpg')

gray = cv.imread('face.jpg',0)

img= pic
color = np.array([])

#scan for faces and draw rectangle
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
x1= faces[0][0]
x2= faces[0][2]
y1= faces[0][1]
y2= faces[0][3]

接下来就是我实际使用它的方法,即face.py脚本

source=img[x1:x1+x2, y1:y1+y2, :]

这需要使用openCV创建的numpyArray片段

 colArr=col.colorArray()


    answer=col.colorCheck(colArr,source)

    print(answer)

虽然这实际上调用了函数

{{1}}

1 个答案:

答案 0 :(得分:0)

你有一个错字。改变这一行

green= abs((g-g1**2))

green= abs((g-g1)**2)