【问题标题】:cv::Mat detect PixelFormatcv::Mat 检测 PixelFormat
【发布时间】:2012-06-06 16:58:37
【问题描述】:

我正在尝试使用 pictureBox->Image (Windows Forms) 来显示 cv::Mat 图像 (openCV)。我想这样做而不将图像保存为文件(因为我想每 100 毫秒重置一次图像)。 我刚刚在这里找到了这个话题:How to display a cv::Mat in a Windows Form application?

当我使用这个解决方案时,图像看起来只是白色的。我想我拿错了 PixelFormat。 那么如何找出我需要的 PixelFormat 呢?没有在 cv::Mat 中看到任何方法来获取相关信息。或者这是否取决于我用来创建这个 cv::Mat 的图像源? 到目前为止谢谢:)

我在这里拍了一个屏幕。它不是完全白色的。所以我想有一些颜色信息。但也许我错了。 Screen

【问题讨论】:

  • 你能说得更具体点吗?你的代码是什么样的?

标签: c++ opencv windows-forms-designer pixelformat


【解决方案1】:

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

【讨论】:

  • 谢谢。我现在就这样尝试了 ´cv::Mat frame = ocvcamimg->captureCamMatImg(); // 获取图像 cv::cvtColor(frame, frame, CV_BGR2RGB); this->pictureBoxVis->Image = 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'。所以我想你是对的。但是我做错了什么?跨度>
【解决方案2】:

感谢您的帮助!问题是别的。 我只是没有为图像对象分配内存。所以没有什么可以真正展示的。 在 headerFile 中使用 cv::Mat img; 并在构造函数(ocvcammg 类)中使用 img = new cv::Mat(120,160,0); 让它工作。 (ocvcamimg->captureCamMatImg() 返回img)。

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多