2009-11-19 44 views
5

Đây là mã hiện tại của tôi (ngôn ngữ là Python):Hiển thị OpenCV cấu trúc dữ liệu iplimage với wxPython

newFrameImage = cv.QueryFrame(webcam) 
newFrameImageFile = cv.SaveImage("temp.jpg",newFrameImage) 
wxImage = wx.Image("temp.jpg", wx.BITMAP_TYPE_ANY).ConvertToBitmap() 
wx.StaticBitmap(self, -1, wxImage, (0,0), (wxImage.GetWidth(), wxImage.GetHeight())) 

Tôi đang cố gắng để hiển thị một iplimage chụp từ webcam của tôi trong một cửa sổ wxPython. Vấn đề là tôi không muốn lưu trữ hình ảnh trên đĩa cứng đầu tiên. Có cách nào để chuyển đổi một iplimage sang định dạng hình ảnh khác trong bộ nhớ? Bất kỳ giải pháp nào khác?

Tôi đã tìm thấy một vài "giải pháp" cho vấn đề này bằng các ngôn ngữ khác, nhưng tôi vẫn gặp sự cố với vấn đề này.

Cảm ơn.

Trả lời

1

Bạn có thể làm với StringIO

stream = cStringIO.StringIO(data) 
wxImage = wx.ImageFromStream(stream) 

bạn có thể kiểm tra chi tiết hơn trong \ wx \ lib \ embeddedimage.py

chỉ 2 cent của tôi.

+0

Bạn có thể xây dựng một chút không? Dữ liệu đến từ đâu? – Domenic

+0

ok, hãy để tôi thử kiểm tra nó. giữ một lúc. – YOU

+0

Tôi đã tìm thấy rằng opencv không có api để viết ImageData vào dòng http://opencv.jp/opencv-1.0.0_org/docs/ref/opencvref_highgui.htm#highgui_func_index để tìm một số cách khác. – YOU

6

Những gì bạn phải làm là:

frame = cv.QueryFrame(self.cam) # Get the frame from the camera 
cv.CvtColor(frame, frame, cv.CV_BGR2RGB) # Color correction 
         # if you don't do this your image will be greenish 
wxImage = wx.EmptyImage(frame.width, frame.height) # If your camera doesn't give 
         # you the stream size, you might have to use (640, 480) 
wxImage.SetData(frame.tostring()) # convert from cv.iplimage to wxImage 
wx.StaticBitmap(self, -1, wxImage, (0,0), 
       (wxImage.GetWidth(), wxImage.GetHeight())) 

I figured oyt hiểu làm thế nào để làm điều này bằng cách nhìn vào Python OpenCV cookbook đồng wxPython wiki.

+1

Tôi biết rõ rằng bài đăng này là một năm cũ, nhưng đó là câu hỏi SO xếp hạng cao nhất hiện tại trên Google cho vấn đề này. – voyager

3

Có, câu hỏi này là cũ nhưng tôi đến đây như mọi người khác đang tìm kiếm câu trả lời. Một số phiên bản của wx, numpy, và opencv sau khi các giải pháp ở trên tôi figured tôi muốn chia sẻ một giải pháp nhanh chóng bằng cách sử dụng hình ảnh cv2 và numpy.

Đây là cách để chuyển đổi một hình ảnh phong cách mảng NumPy như được sử dụng trong OpenCV2 vào một bitmap sau đó bạn có thể thiết lập để một yếu tố hiển thị trong wxPython (như ngày nay):

import wx, cv2 
import numpy as np 

# Start with a numpy array style image I'll call "source" 

# convert the colorspace to RGB from cv2 standard BGR, ensure input is uint8 
img = cv2.cvtColor(np.uint8(source), cv2.cv.CV_BGR2RGB) 

# get the height and width of the source image for buffer construction 
h, w = img.shape[:2] 

# make a wx style bitmap using the buffer converter 
wxbmp = wx.BitmapFromBuffer(w, h, img) 

# Example of how to use this to set a static bitmap element called "bitmap_1" 
self.bitmap_1.SetBitmap(wxbmp) 

Tested 10 phút trước :)

Điều này sử dụng chức năng wx được xây dựng BitmapFromBuffer và tận dụng lợi thế của giao diện bộ đệm NumPy để tất cả những gì chúng ta phải làm là trao đổi màu sắc để có được những thứ đó theo thứ tự mong muốn.

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