繁体   English   中英

如何将 cv::Mat 转换为 void*

[英]How to convert cv::Mat to 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。

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

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
}
  • ImageSrc是 RGB,所以它有 3 个颜色通道,类型应该是CV_8UC3而不是CV_8U
  • 使用ImageF作为data参数创建灰色cv::Mat (并键入CV_8UC1 )。
    创建cv:Mat对象(构造函数重载)有多种选择。
    上面的选项设置ImageF指向图像的数据。
  • 使用cv::COLOR_RGB2GRAY转换类型执行cv::cvtColor ,用于从 RGB 转换为灰色。

笔记:
在执行 function之前,必须在LabView中定义 output 图像的分辨率(684x488)和类型(每个像素一个字节的灰色类型)。
大小和类型信息不会从function传递到LabView
只有“原始”图像数据被传递给LabView

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM