我正在用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。
根据以下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
。
[请让我知道它是否有效,因为我无法对其进行测试。