我正在做一个项目,它需要转换图像格式。首先,我需要将图像从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<byte>
更改为cv::Mat
吗?
P.S。 Image<byte>
是来自cvd库的8位数据类型。
namespace CVD
{
typedef unsigned char byte;
}
答案 0 :(得分:0)
从Image<byte>
更改为cv::Mat
Mat image(rows,cols,CV_8UC1,(unsigned char *)imBW.data()); 对于灰度图像。
您的代码可能运行缓慢。我们可以直接从unsigned char * data创建cvd图像和opencv mat。
void conversionNB(Mat&amp; frame,Image&amp; imBW){ Mat cvd_image(frame.rows,frame.cols,CV_8UC1,(unsigned char *)imBW.data()); cvtColor(frame,frame,CV_BGR2GRAY); frame.copyTo(cvd_image); }
void conversionRGB(Mat&amp; frame,Image&gt;&amp; imRGB){ Mat cvd_image(frame.rows,frame.cols,CV_8UC3,(unsigned char *)imRGB.data()); cvtColor(frame,frame,CV_BGR2RGB); frame.copyTo(cvd_image); }