user2266175
user2266175

Reputation: 131

How to convert numpy matrix to OpenCV image [python]

I have a numpy 2d matrix which represents a colored image. This matrix has some negative and floating point numbers but of course I can display the image using imshow(my_matrix).

my_matrix_screenshot

I need to perform histogram equalization to this colored image so I found a code here in stackoverflow using OpenCV (OpenCV Python equalizeHist colored image) but the problem is I am unable to convert the 2d matrix to OpenCV matrix which takes three channels for RGB.

I was searching again but all I found is to convert regular 3d numpy matrix to OpenCV matrix so how can numpy 2d matrix be converted to OpenCV matrix which has 3 channels?

Upvotes: 9

Views: 35671

Answers (2)

shouhuxianjian
shouhuxianjian

Reputation: 129

because the numpy.ndarray is the base of OpenCV, so you just write the code as usual,like

img_np = np.ones([100,100])
img_cv = cv2.resize(img_np,(200,200))

you can try

Upvotes: 10

Prasad
Prasad

Reputation: 6034

It is better to stack the existing numpy array one above the other of its own copy than to reshape it and add the third axis. Check this code:

import numpy as np
import matplotlib.pyplot as plt

a = np.random.rand(90, 100) # Replace this line with your 90x100 numpy array.
a = np.expand_dims(a, axis = 2)
a = np.concatenate((a, a, a), axis = 2)
print(a.shape)
# (90, 100, 3)
plt.imshow(a)
plt.show()

You will get a gray colored image.

Upvotes: -3

Related Questions