Edit: original title "convert numpy array to cvmat" was a mistake - OpenCV's less than useful error message and my not reading the docs!
With OpenCV 2, IPython now uses NumPy arrays by default.
cvimage = cv2.imread("image.png") #using OpenCV 2
type(cvimage)
Out: numpy.ndarray #dtype is uint8
pltimage = plt.imread("image.png") #using Matplotlib
type(pltimage)
Out: numpy.ndarray #dtype is float
plt.imshow(cvimage) # works great
cv2.imshow(cvimage)
TypeError: Required argument 'mat' (pos 2) not found
Since cv2
uses NumPy arrays by default, there is no longer any cv::Mat constructor and NumPy has no functions to convert to a cv::Mat
array.
Any ideas?
Then, the image is shown using a call to the cv::imshow function. The first argument is the title of the window and the second argument is the cv::Mat object that will be shown.
Ans. One of the biggest reasons for not working on the CV2 Imshow is not using the wait key.
cv2. imshow() function takes any size of NumPy array and shows the image in the same size in the window. If the image resolution is more than a system screen resolution then it shows only those pixel which fits in the screen. Ex: Image resolution is (2000,1000) (widht, height) and screen resolution is (1000,500).
The function has the following docstring: imshow(winname, mat) -> None
.
You can see the doc string by typing cv2.imshow.__doc__
in the interpreter.
Try cv2.imshow('Image', cvimage)
.
tl;dr : In original question, first argument of "window name" was missing. "imshow" takes two parameters and only one was supplied.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With