2014-12-30 51 views
2

我将96x96像素的图像作为numpy数组。事情是我不知道如何使opencv加载此ndarray并检测面孔。如何在openCV中将灰度图像加载为numpy数组

img = cv2.imread(X) 

此行不起作用。我得到这个错误

TypeError: expected string or Unicode object, numpy.ndarray found 

X是输入图像阵列(灰度)

+0

imread需要一个文件名。如果X已经是一个numpy数组,为什么不按原样使用它? – berak

+0

这就是我所做的,它是抛出上述错误。 – pbu

+0

那么你将不得不向我们展示*那*代码。 – berak

回答

0

确定它现在使用这种

img = X[k].reshape(96,96) 

但输出当I OpenCV的显示黑色图像。按照要求,这是一段代码。

import numpy as np 
import cv2, cv 

import numpy as np 
import pandas as pd 
import pylab as pl 
from skimage import transform 
from numpy import ravel 

import pylab as pl 

from sklearn import linear_model, cross_validation 
from sklearn.svm import SVR 
from sklearn.decomposition import PCA 
from sklearn.neural_network import BernoulliRBM 
from sklearn.tree import DecisionTreeRegressor 
from sklearn.ensemble import RandomForestRegressor 

df = pd.read_csv('/users/prabhubalakrishnan/Desktop/training.csv', header=0) 

x = df['Image'][:5].values 


face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') 

X = [] 

for k in xrange(len(x)): 
    img = np.fromstring(x[k], dtype = np.uint8, sep=' ', count=96*96) 
    X.append (ravel(transform.resize (img.reshape(96,96) , (96,96)))) 

''' 
for k in xrange(len(X)): 
pl.imshow(X[k].reshape(96,96),cmap=pl.cm.gray) 
pl.show() 
''' 

X = np.array(X) 
X = X.astype('uint8') 

print 'X:', X.shape, X.dtype 

pl.ion() 


for k in xrange(len(X)): 

    img = X[k].reshape(96,96) 

    faces = face_cascade.detectMultiScale(img, 1.03, 5) 

    for (x,y,w,h) in faces: 
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) 
    roi_color = img[y:y+h, x:x+w] 

    print 'Image',img 
    print 'Faces',faces 
    cv2.namedWindow("img", cv2.CV_WINDOW_AUTOSIZE) 
    cv2.imshow('img',img) 
    cv2.waitKey(0) 
    cv2.destroyAllWindows() 
相关问题