【发布时间】:2015-03-12 19:18:12
【问题描述】:
我正在尝试将 System::Drawing::Bitmap 转换为 cv::Mat 最终将成为 c# 的包装器(在这种情况下不能使用 EMGU)。我已经看到很多关于如何使用指向位图数据的指针构造 cv::Mat 的示例,但我的 cv 图像是垃圾(一些像素的垃圾,然后什么都没有)。
我的代码是:
System::Drawing::Rectangle blank = System::Drawing::Rectangle(0, 0, _image->Width, _image->Height);
System::Drawing::Imaging::BitmapData^ bmpdata = image.LockBits(blank,System::Drawing::Imaging::ImageLockMode::ReadWrite,System::Drawing::Imaging::PixelFormat::Format24bppRgb);
cv::Mat thisimage(cv::Size(image.Width, image.Height), CV_8UC3,bmpdata->Scan0.ToPointer(),cv::Mat::AUTO_STEP);
image.UnlockBits(bmpdata);
我尝试了各种方法并尝试直接复制字节,但似乎无法正确获取语法。但是,无论我做什么,图像似乎都无法正确转换。我正在使用 Visual Studio 的图像监视插件来检查我的图像,如果我直接从文件加载 cv::Mat 就可以了。
【问题讨论】:
-
什么是图像?什么是_image?你能发布你的最终代码来将位图转换为垫子吗?
标签: .net opencv visual-c++ bitmap c++-cli