cv::Mat 到 QImage 转换

2023-12-21

我发现了非常相似的主题:如何将 opencv cv::Mat 转换为 qimage https://stackoverflow.com/questions/5026965/how-to-convert-an-opencv-cvmat-to-qimage,但这并不能解决我的问题。

我有将 cv::Mat 转换为 QImage 的功能

QImage cvMatToQImg(cv::Mat& mat)
{
    cv::Mat rgb;
    if(mat.channels()==1)
    {
        cv::cvtColor(mat,rgb,CV_GRAY2BGR);
        cv::cvtColor(rgb,rgb,CV_BGR2BGRA);
        QImage temp = QImage((unsigned char*)(rgb.data), rgb.cols, 
                              rgb.rows,QImage::Format_ARGB32 );

        QImage returnImage = temp.copy();
        return returnImage;
}

它对我有用,但我想让它更有效率。 第一:为什么要更改 2 个 cvtColor 函数:

cv::cvtColor(mat,rgb,CV_GRAY2BGRA)

失败

QImage returnImage = temp.copy() 

有段错误。

那么如何消除QImage的复制呢。当我只是返回临时图像时,我遇到了段错误。

那里还可以进行其他优化吗?这是一个经常使用的功能,所以我想让它尽可能快。


您对问题的解决方案效率不高,特别是它的效率低于我在您链接到的其他问题上发布的代码。

您的问题是必须从灰度转换为彩色或 RGBA。一旦需要这种对话,自然就需要数据的副本。

我的解决方案同时进行灰度和颜色之间以及 cv::Mat 和 QImage 之间的转换。这就是为什么它是您可以获得的最有效的方法。

在您的解决方案中,您首先尝试转换,然后想要直接围绕 OpenCV 数据构建 QImage 以备用第二个副本。但是,您指向的数据是临时的。一旦您离开该函数,cv::Mat 就会释放其关联的内存,这就是为什么它在 QImage 中也不再有效的原因。您可以事先手动增加 cv::Mat 的引用计数器,但这会为之后的内存泄漏打开大门。

最后,你尝试用一种肮脏的解决方案来解决一个更好以干净的方式解决的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cv::Mat 到 QImage 转换 的相关文章

  • Opencv 运动检测与跟踪

    我需要在网络摄像头的视频帧中进行强大的运动检测和跟踪 背景总是一样的 目的是识别物体的位置 如果可能的话没有阴影 但并不急于去除阴影 我已经尝试过用于背景减法和阈值化的opencv算法 但这仅取决于一个图像作为背景 如果背景的亮度 或相机自
  • 从凸点获取角点

    我编写了算法来提取图像中显示的点 它们形成凸形 我知道它们的顺序 如何从这些点中提取角点 顶部 3 个和底部 3 个 我正在使用opencv 如果你已经有了物体的凸包 并且该包包含角点 那么你需要做的就是简化包直到它只有 6 个点 有很多方
  • 使用 pygtk3 将 GUI 窗口添加到 python opencv2 程序

    我已经使用Python和Opencv2完成了一个程序 现在 我想向我的程序添加一个 GUI 窗口 我对 PyGtk3 有一些经验 因此 我修改了代码以采用 PyGtk3 但是 我遇到了错误 因此 我尝试了一个简单的程序来找出实际的错误 我的
  • 使用opencv+picamera流IO用树莓派捕获视频

    我使用 Raspberry 来简单地显示一个视频 目前仅此 为此 我必须使用 opencv cv2 我尝试了很多解决方案 但现在我想使用 Picamera 库捕获视频 我将向您展示我的代码 import io import time imp
  • 类型错误:只有长度为 1 的数组可以转换为 Python 标量

    我是 openCV 的初学者 正在尝试分析数独求解器的现有代码 有这一段代码会引发错误 samples np float32 np loadtxt feature vector pixels data responses np float3
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • OpenCV 中的 Gabor 内核参数

    我必须在我的应用程序中使用 Gabor 过滤器 但我不知道这个 OpenCV 方法参数值 我想对虹膜进行编码 启动 Gabor 过滤器并获取特征 我想对 12 组 Gabor 参数值执行此操作 然后我想计算 Hamming Dystans
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • 在 Qt GraphicsView 中创建长线(或十字线)光标的最佳方法

    创建长十字线光标 与视口一样长 的简单方法是创建一条十字线graphicsItem 当鼠标移动时 设置该项目的pos财产 但是当场景复杂时这种方式会很慢 因为它要更新整个视口来更新光标的pos 另一种简单的方法是setCursor QCur
  • 为什么动态 qml 对象的创建如此缓慢,有哪些合理的替代方案?

    我想要实现的目标类似于棋盘游戏 有一个100 100的网格 放在一个Item它驻留在一个Flickable 游戏板 的各个矩形都是 svg 图像 目前大约有 20 种 可能会增加到数百种 作为基准测试 我只是尝试用元素填充 世界 Compo
  • QML MouseArea 将事件传播到按钮

    我正在开发一个应用程序 其菜单类似于 Android 版 Gmail 收件箱应用程序菜单 基本上 当您按下按钮打开菜单时 它就会滑入视图 用户可以将其滑开或按菜单上的按钮 对于滑动我使用了代码SwipeArea from kovrov ht
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源
  • 一个具有完全透明背景的qt小部件

    我需要创建一个 qt 小部件 它将充当其他一些小部件的父级 并对它们进行排序 现在的问题是如何使其背景完全透明 我想这样做 struct Imp Imp QWidget parent thisWidget new QWidget paren
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 如何在不声明 32 个插槽的情况下将 32 个按钮的 pressed() 信号连接到单个函数?

    我有一个小部件 里面有 32 个按钮 我需要将每个按钮的 Pressed 信号连接到一个插槽 以便调用一个函数 该函数的参数取决于我按下的按钮 现在我通过以 on QPushButtonName pressed 的形式添加 32 个插槽来做

随机推荐

  • 多列的 formatStyle DT R

    我有一个包含一个 ID 列和多个数字列的 data frame 数字列的数量可能不同 在这些数字列中 我想将列上方的所有值均表示为绿色 将列下方的所有值均表示为红色 下面的代码给出了我想要的结果 但它不是具有或多或少数字列的数据框的通用代码
  • Slick Slider 无法在隐藏的 div 上正确加载

    标题是不言自明的 我正在单个 HTML 文件中创建一个网站 其中不同的页面只是div是从display none to display block 根据onclick功能 在其中一个页面中 我想使用光滑的滑块 不幸的是 第一次显示 div
  • 运行 React Native 应用程序时,在 Android Studio Bumblebee 中按 ctrl+m 时,调试器选项未打开

    运行 React Native 应用程序时 在 Android Studio Bumblebee 中按 ctrl m 时 调试器选项未打开 您必须首先启用模拟器在不同的窗口中运行 这将允许您使用键盘快捷键 要在单独的窗口中运行模拟器 请转至
  • 要求用户连接到互联网或退出应用程序(android)

    我正在开发一个图像库应用程序 其中应用程序从互联网检索图像 所以我想提示一个对话框 要求用户连接到互联网或退出应用程序 向用户显示 WiFi 和运营商网络选项 这会检查 wifi 和移动数据 在启动或您的主要活动上运行此代码来检查网络连接
  • 使用 mbedtls 的 AES-CMAC:未定义的参考错误

    我尝试使用 mbedTLS 实现 AES CMAC 我收到一些错误 未定义的引用mbedtls cipher cmac starts 未定义的引用mbedtls cipher cmac update 未定义的引用mbedtls cipher
  • 在 VB.NET 中连接数组[重复]

    这个问题在这里已经有答案了 在 Visual Basic 中连接一个或多个数组 或 ArrayList 的最简单方法是什么 我正在使用 NET 3 5 如果这很重要的话 这是用 C 编写的 但你肯定能弄清楚 int a new int 1
  • 如何通过从文件读取坐标自动画线?

    我正在尝试在一端画一条带有箭头的线 另外 我需要对同一图中的多个箭头自动执行此操作 d3 csv data coordinates csv then function data d x1 d x1 d y1 d y1 d x2 d x2 d
  • iPhone MonoTouch - 获取捆绑包版本

    在 MonoTouch 中 我们如何获取当前运行的包的版本 我最接近的猜测是在某个地方 NSBundle MainBundle ObjectForInfoDictionary 使用以下代码获取捆绑包的当前版本 NSBundle MainBu
  • Google Data Studio Connector 检索数据的不同参数

    我正在尝试连接到需要不同参数来检索数据的数据存储 我尝试过数据连接器的不同多个实例 但数据工作室似乎很难存储不同的配置值 数据连接器控件当前不可用于社区连接器 请问最好的方法是什么 社区连接器当前不支持参数化 我们计划将来添加此功能 目前
  • 无法连接到 SQL Server 来调试 SQLCLR 存储过程

    我想在 SQL Server 中调试 SQLCLR 存储过程 我一直在尝试在 VS2015 Community 和最近安装的 VS2017 Community 版本中调试 SP 但没有成功 我非常确定问题出在连接到 SQL Server 上
  • 如何使用 RVM 并创建全局可用的 gem?

    我正在运行 Mac OSX 10 6 4 并安装了 RVM 到目前为止 它非常棒 我真的很喜欢它让我在同一台机器上管理多个版本的 Rails 和 ruby 的方式 而不会让人头疼 但是 我不想为每个设置安装某些宝石 例如乘客 有没有办法在宝
  • 当达到字符限制时,AngularJS 阻止在文本区域上输入

    当达到最大字符数时 如何阻止用户在文本区域中输入更多字符 我现在使用 ng keypress 但我不知道如何在达到限制时阻止输入 用户不应能够在该文本区域中输入或粘贴总共超过 1000 个字符 问题是如何停止输入 而不是如何计算输入长度 这
  • ArticlesController#show 中的 ActiveRecord::RecordNotFound 无法找到没有 ID 的文章

    我正在尝试向数据库提交一些数据 但当我尝试检索这些数据时 显示无法找到没有 ID ils 4 0 1 的文章 我正在使用 ruby 2 0 0 和 ra def show article Article find params id end
  • 阻止 iPhone 缩放表格? [复制]

    这个问题在这里已经有答案了 代码
  • Scala 转换为泛型类型

    我对泛型类型感到困惑 我预计2 asInstanceOf A 被强制转换为类型A 同时 它被投射到Int 除此之外 输入是java lang Long而输出是一个列表Int 根据定义输入和输出应该是相同的类型 这是为什么 def whate
  • 如何在C#中使用Webclient填写表单并提交

    我是在 C 中使用 WebClient HttpResponse 和 HttpRequest 库的新手 所以如果我的问题读起来令人困惑 请耐心等待 我需要构建一个基于 C 的 WinForm 它可以打开一个 URL 该 URL 受到基本授权
  • 0/1 重量不合理的背包

    考虑0 1背包问题 http en wikipedia org wiki Knapsack problem 标准动态规划算法仅适用于背包的容量和重量均为整数 有理数时 当容量 重量不合理时怎么办 问题是我们不能像处理整数权重那样记忆 因为我
  • plsql 远程调试断点不起作用

    我在调试 pl sql 代码时遇到了奇怪的情况 我将 sql Developer 设置为侦听调试连接 在java代码中 我使用以下代码附加调试器 CallableStatement cstmt null try cstmt getConne
  • Android – 如何加载共享库?

    我创建了最简单的 EXECUTABLE 和 SHARED LIBRARY 如果不更改 LD LIBRARY PATH 则不会加载 SHARED LIBRARY hello hello link image 1995 failed to li
  • cv::Mat 到 QImage 转换

    我发现了非常相似的主题 如何将 opencv cv Mat 转换为 qimage https stackoverflow com questions 5026965 how to convert an opencv cvmat to qim