I am using the following code in python to calculate and display my eigenfaces, however, it always returns 6 black images.
My problem here is not the calculation of the eigenfaces, but how to display the images in color and not in black. How can I fix this?
# Read in original image of old person and store it
old = cv2.cvtColor(cv2.imread('images/old.jpg'), cv2.COLOR_BGR2RGB)
# Read in altered images of old person and store them
oldBeard = cv2.cvtColor(cv2.imread('images/oldBeard.jpg'), cv2.COLOR_BGR2RGB)
oldHair = cv2.cvtColor(cv2.imread('images/oldHair.png'), cv2.COLOR_BGR2RGB)
oldSmile = cv2.cvtColor(cv2.imread('images/oldSmile.jpg'), cv2.COLOR_BGR2RGB)
oldNoise = cv2.cvtColor(cv2.imread('images/oldNoise.jpeg'), cv2.COLOR_BGR2RGB)
oldBright = cv2.cvtColor(cv2.imread('images/oldBright.jpg'), cv2.COLOR_BGR2RGB)
oldSet = (old, oldBeard, oldHair, oldSmile, oldNoise, oldBright)
def createDataMatrix(images):
numImages = len(images)
sz = images[0].shape
data = np.zeros((numImages, sz[0] * sz[1] * sz[2]), dtype=np.uint8)
for i in range(0, numImages):
image = images[i].flatten()
data[i, :] = image
print("DONE: CREATING DATA MATRIX")
return data
# Number of EigenFaces
NUM_EIGEN_FACES = 6
# Maximum weight
MAX_SLIDER_VALUE = 255
# Create data matrix for PCA.
data = createDataMatrix(oldSet)
# Compute the eigenvectors from the stack of images created
print("Calculating PCA ", end="...")
mean, eigenVectors = cv2.PCACompute(data, mean=None, maxComponents=NUM_EIGEN_FACES)
print("DONE")
averageFace = mean.reshape(3500, 3500, 3)
eigenFaces = []
for eigenVector in eigenVectors:
eigenFace = eigenVector.reshape(3500, 3500, 3)
eigenFaces.append(eigenFace)
for i in eigenFaces:
plt.figure()
plt.imshow((i* 255).astype(np.uint8))
plt.show()
These are the values I'm getting for my unnormalized eigenfaces and some normalized eigenfaces:
Unnormalized eigenfaces (eigenvectors that aren't scaled)
source https://stackoverflow.com/questions/72434973/displaying-eigenfaces-but-the-image-is-always-black
Comments
Post a Comment