c++ - 如何将 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。
解决方案
根据以下帖子,它应该非常简单:
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
asdata
参数(和 type )创建灰色CV_8UC1
。
创建对象有多种选择cv:Mat
(构造函数重载)。
上面的选项设置ImageF
指向图像的数据。cv::cvtColor
以cv::COLOR_RGB2GRAY
转换类型 执行,用于从 RGB 转换为灰色。
注意:必须在执行函数之前
定义输出图像的分辨率(684x488)和类型(每个像素一个字节的灰度类型) 。
大小和类型信息不会从to传递。
只有“原始”图像数据被传递给. LabView
function
LabView
LabView
请让我知道它是否有效,因为我无法测试它。
推荐阅读
- ios - 为什么我的屏幕从滚动视图的中心开始?IOS
- javascript - setState() 函数不起作用,我无法更新我的状态。我怎么解决这个问题?
- amazon-elastic-beanstalk - AWS 路由 53 配置为指向 Elastic BeanStalk URL
- pandas - 需要帮助获取按患者 ID 分组的最小和最大日期之间的差异,仅使用 Python
- optimization - 为 SQL 数据库和面向服务的架构优化 GraphQL 解析器
- npm - 将 jhipster 从 v5.0.1 升级到最新
- reactjs - 你如何突出显示 React Dev Tools V4 中的更新?
- python - 套接字消息传递客户端/服务器:客户端不发送消息
- java - POM.XML ISSUE : 项目构建错误解析表达式 ${browser.name} 在 browser.name 中检测到以下递归表达式循环
- java - 仅按钮背景 在一个按钮上更新