首页 > 解决方案 > 如何将 cv::Mat 转换为 void*

问题描述

我正在用 C++ 制作一个 DLL 以在 LabView 中使用它,我得到一个 RGB 图像并将其转换为灰度。我的代码如下:

DLLIMPORT void function (void* ImageSrc, void* ImageF)
{
    cv::Mat greyMat, colorMat;
    colorMat = cv::Mat(488, 648, CV_8U, (uchar*)ImageSrc);
    greyMat = (colorMat, CV_LOAD_IMAGE_GRAYSCALE);


}

ImageF 将是灰色图像,我不知道如何在 ImageF 中复制 grayMat。

标签: c++opencv

解决方案


根据以下帖子,它应该非常简单:

DLLIMPORT void function(void* ImageSrc, void* ImageF)
{
    cv::Mat colorMat = cv::Mat(488, 648, CV_8UC3, ImageSrc);
    cv::Mat greyMat = cv::Mat(488, 648, CV_8UC1, ImageF);
    cv::cvtColor(colorMat, greyMat, cv::COLOR_RGB2GRAY); //You may also try cv::COLOR_BGR2GRAY
}
  • ImageSrcRGB,所以它有3个颜色通道,类型应该是CV_8UC3而不是CV_8U
  • cv::Mat使用ImageFasdata参数(和 type )创建灰色CV_8UC1
    创建对象有多种选择cv:Mat(构造函数重载)。
    上面的选项设置ImageF指向图像的数据。
  • cv::cvtColorcv::COLOR_RGB2GRAY转换类型 执行,用于从 RGB 转换为灰色。

注意:必须在执行函数之前
定义输出图像的分辨率(684x488)和类型(每个像素一个字节的灰度类型) 。 大小和类型信息不会从to传递。 只有“原始”图像数据被传递给. LabView
functionLabView
LabView

请让我知道它是否有效,因为我无法测试它。


推荐阅读