2014-12-30 3 views
2

나는 96x96 픽셀 이미지가 numpy 배열로 있습니다. 문제는 opencv가이 ndarray를로드하고 얼굴을 탐지하는 방법을 모른다는 것입니다.그레이 스케일 이미지를 openCV에서 numpy 배열로로드하는 방법

img = cv2.imread(X) 

이 줄은 작동하지 않습니다. 제가

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

X는 입력 화상 어레이 (계조)가 지금

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

를 사용하여 작동하지만 출력 할 때 난의 OpenCV의 블랙 이미지를 표시

+0

imread는 파일 이름을 필요로합니다. X가 이미 numpy 배열이면, 그대로 사용하지 않겠습니까? – berak

+0

그게 내가 무엇을했는지 위의 오류를 던지고있다. – pbu

+0

그러면 코드를 * 표시해야합니다. – berak

답변

0

괜찮이 오류. 요청 된대로 이것이 코드 조각입니다.

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() 
관련 문제