[英]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.