2012-06-01 268 views
3

我試圖使用pictureBox->圖像(Windows窗體)來顯示cv :: Mat圖像(openCV)。我想這樣做,而不保存圖像作爲一個文件(因爲我想每100ms重置圖像)。 我剛剛在這裏找到該主題:How to display a cv::Mat in a Windows Form application?cv :: Mat檢測PixelFormat

當我使用此解決方案時,圖像看起來只是白色。我想我錯了PixelFormat。 那麼如何弄清楚我需要的PixelFormat?在cv :: Mat中沒有看到任何方法來獲取有關的信息。或者這是否取決於我用來創建此cv :: Mat的圖像源? 到目前爲止感謝:)

在這裏,我拍了一個屏幕。它不完全是白色的。所以我想有一些顏色信息。但也許我錯了。 Screen

+0

你能更具體嗎?你的代碼是什麼樣的? – Gnosophilon

回答

2

cv::Mat.depth()返回像素類型,例如。 CV_8U爲8位無符號等 和cv::Mat.channels()返回通道,用於將彩色圖像

對於數,通常爲3「定期圖像」的OpenCV通常使用8位的BGR顏色順序應直接映射到Windows位圖或大多數Windows庫。你可能想要system.drawing.imaging.pixelformat.Format24bppRgb,我不知道它使用什麼順序(RGB或BGR),但你可以使用opencv cv :: cvtColor()和CV_BGR2RGB轉換爲RGB

+0

感謝迄今。 我現在就試過了 'cv :: Mat frame = ocvcamimg-> captureCamMatImg(); //獲取圖片 \t cv :: cvtColor(frame,frame,CV_BGR2RGB);圖像= gcnew System :: Drawing :: Bitmap(frame.size()。width,frame.size()。height,frame.step,System :: Drawing :: Imaging :: PixelFormat: :Format24bppRgb,(IntPtr)frame.data);' 但是仍然沒有改變。 :( 'cv :: Mat.depth()== 0 == CV_8U'和'cv :: Mat.channels()== 3'。所以我想你是對的。但是我做錯了什麼呢? – Ciprian

1

感謝您的幫助!問題是別的。 我只是沒有爲圖像對象分配內存。所以沒有什麼可以真正展示的。 在構造函數(ocvcamimg Class)的headerFile和img = new cv::Mat(120,160,0);中使用cv::Mat img;使它工作。 (ocvcamimg->captureCamMatImg()返回img)。