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

问题描述 投票:1回答:1

我正在用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
1个回答
0
投票

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

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
  • 使用cv::Mat作为ImageF参数创建灰色data(并键入CV_8UC1)。创建cv:Mat对象(构造函数重载)有多个选项。上述选项将ImageF设置为指向图像数据。
  • cv::cvtColor转换类型执行cv::COLOR_RGB2GRAY,以便从RGB转换为灰色。

注意:必须在执行功能的LabView 之前中定义输出图像的分辨率(684x488)和类型(每像素一个字节的灰色类型)。大小和类型信息不会从function传递到LabView。仅“原始”图像数据被传送到LabView

[请让我知道它是否有效,因为我无法对其进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.