2012-03-28 49 views
10

Với OpenCV 2, IPython hiện sử dụng mảng NumPy theo mặc định.Chuyển đổi mảng NumPy thành cvMat cv2

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 

Kể từ cv2 sử dụng mảng NumPy theo mặc định, không còn bất kỳ cv :: Mat constructor và NumPy không có chức năng chuyển đổi sang một mảng cv::Mat.

Bất kỳ ý tưởng nào?

+1

Có, điều này đã được trả lời - bạn đang thực sự không bỏ qua đối số thứ hai, nhưng đầu tiên. Tuy nhiên, tôi đến đây với một vấn đề khác: không phải mọi 'numpy.ndarray' thuộc loại' uint8' đều có thể được hiển thị. Tôi đã tạo một slice để lấy một kênh của một hình ảnh, như 'red = frame [:,:, 0]', và sau đó có một ngoại lệ trong 'imshow'. Tôi nghi ngờ đó là vì sự thưa thớt. 'red = frame [:,:, 0] .copy()' đã sửa lỗi đó. –

Trả lời

14

Hàm này có chuỗi sau: imshow(winname, mat) -> None. Bạn có thể xem chuỗi tài liệu bằng cách nhập cv2.imshow.__doc__ vào thông dịch viên.

Hãy thử cv2.imshow('Image', cvimage).

+2

Khi tôi thực hiện 'cvimage = cv2.imread ('image.png')' theo sau là 'cv2.imshow ('Image', cvimage)', không có lỗi nào được trả về và hình ảnh được hiển thị. – zarthur

+0

Nếu không nhập nhập dữ liệu, chúng được trả về là 'numpy.ndarray'. – zarthur

+1

bạn đang thiếu một yêu cầu arg – Neon22

3

Mat đối tượng là cần thiết vì C/C++ thiếu triển khai chuẩn mực/bản địa chuẩn.

Tuy nhiên, numpy 's array là sự thay thế hoàn hảo cho chức năng đó. Do đó, mô-đun cv2 chấp nhận numpy.array s ở bất kỳ nơi nào ma trận được chỉ định trong tài liệu.

14

Câu hỏi về mặt kỹ thuật hỏi cách chuyển đổi một mảng NumPy (tương tự như mảng CV2) thành đối tượng Mat (CV). Đối với bất kỳ ai quan tâm, điều này có thể được thực hiện bằng cách:

mat_array = cv.fromarray(numpy_array) 

nơi mat_array là đối tượng Mat và numpy_array là mảng hoặc hình ảnh NumPy. Tôi khuyên bạn nên tránh xa các cấu trúc CV cũ hơn nếu có thể. Numpy mảng cung cấp hiệu suất tốt hơn nhiều so với thực hiện trong Python bản địa

+9

Điều này là dành cho cv không cv2 –

+0

Làm thế nào chúng ta nên làm điều này trong C + + và cho cv2? –

Các vấn đề liên quan