【问题标题】:Image format conversion opencv图像格式转换opencv
【发布时间】:2014-05-24 16:59:41
【问题描述】:

我正在做一个项目,它需要转换图像格式。首先,我需要将图像从cv::Mat 格式更改为Image<byte> 格式,这是一种黑白框。以下代码展示了如何从cv::Mat 更改为Image<byte>

void conversionNB(Mat frame, Image<byte> &imBW)
{ 
    Mat clone = frame.clone();
    Mat_<Vec3b>& frame_p = (Mat_<Vec3b>&)clone;
    for(int i = 0; i < 480; i++)
    {
        for(int j = 0; j < 640; j++)
        {
            imBW[i][j] = (frame_p(i,j)[0] + frame_p(i,j)[1] + frame_p(i,j)[2])/3;
        }
    }
} 

然后,在处理完图像后,我需要将图像改回cv::Mat 格式以显示它们。有人知道如何根据代码从Image&lt;byte&gt; 更改为cv::Mat 吗?

附: Image&lt;byte&gt; 是来自 cvd 库的 8 位数据类型。

namespace CVD
{
   typedef unsigned char byte;
}

【问题讨论】:

  • Image 不是来自opencv,请解释一下它是什么?
  • Image 是来自 cvd 库的 8 位数据类型。 typedef 无符号字符字节

标签: c++ image opencv


【解决方案1】:
  1. Image&lt;byte&gt; 更改为cv::Mat

    Mat image(rows,cols,CV_8UC1,(unsigned char*)imBW.data()); 对于灰度图像。

  2. 您的代码可能运行缓慢。我们可以直接从 unsigned char* 数据创建 cvd 图像和 opencv mat。

    void 转换NB(Mat&frame, Image &imBW){ Mat cvd_image(frame.rows,frame.cols,CV_8UC1,(unsigned char*)imBW.data()); cvtColor(帧,帧,CV_BGR2GRAY); frame.copyTo(cvd_image); }

    void conversionRGB(Mat&frame, Image > &imRGB){ Mat cvd_image(frame.rows,frame.cols,CV_8UC3,(unsigned char*)imRGB.data()); cvtColor(帧,帧,CV_BGR2RGB); frame.copyTo(cvd_image); }

【讨论】:

    猜你喜欢
    • 2017-08-31
    • 2012-12-17
    • 2020-07-13
    • 2019-08-14
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多