2014-12-30 48 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() 
相關問題