2012-06-01 64 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)。