最近用到了一个C#写成的图像算法类,在C++ OpenCV下使用,其中涉及到图像格式在 cv::Mat 和 .Net Bitmap 的互换。网上搜了一些相关程序,总结如下:
(1)cv::Mat 至 .Net Bitmap
/*----------------------------
* 功能 : 将图像格式由 cv::Mat 转换为 System::Drawing::Bitmap
* - 不拷贝图像数据
*----------------------------
* 函数 : ConvertMatToBitmap
* 访问 : public
* 返回 : Bitmap图像指针,若转换失败,则返回的图像宽高均为1
*
* 参数 : cvImg [in] OpenCV 图像
*/
System::Drawing::Bitmap^ ConvertMatToBitmap(cv::Mat& cvImg)
{
System::Drawing::Bitmap^ bmpImg;
//检查图像位深
if(cvImg.depth() != CV_8U)
{
cout << "输入图像位深:" << cvImg.depth() << ". 只处理每通道8位深度的图像!" << endl;
bmpImg = gcnew System::Drawing::Bitmap(1,1,System::Drawing::Imaging::PixelFormat::Format8bppIndexed);
return (bmpImg);
}
//彩色图像
if(cvImg.channels() == 3)
{
bmpImg = gcnew Bitmap(
cvImg.cols,
cvIm