PySide(PyQt)与OpenCV图像格式的相互转换

PySide和OpenCV在图像格式上的区别:

主要表现在图像数据的存储方式和使用场景上。以下是一些关键区别:

1. 数据结构

PySide:

  • QImage 和 QPixmap 是 PySide 中常用的图像表示形式。
    • QImage:用于直接访问图像的像素数据,适合需要进行图像处理或分析的场景。
    • QPixmap:专为高效地在屏幕上显示图像设计,通常用于绘制操作。

OpenCV:

  • 使用 cv::Mat 作为主要的数据结构来表示图像。
    • cv::Mat:一个多维矩阵,专门为图像处理和计算机视觉设计,能够高效地进行像素操作和矩阵运算。

2. 数据存储方式

QImage:

  • 支持多种图像格式(例如 Format_RGB32Format_ARGB32Format_Grayscale8 等)。
  • 内部数据通常以线性内存存储,可以通过 bits() 方法访问底层的像素数据。

cv::Mat:

  • 数据以连续内存块存储,常见格式包括 CV_8UC3(三通道8位无符号整型,即RGB图像)、CV_8UC1(单通道8位无符号整型,即灰度图像)等。
  • 直接访问和操作矩阵数据十分方便,适用于大量图像处理算法。

3. 使用场景

QImage/QPixmap:

  • 主要用于GUI应用程序中图像的显示和简单处理。
  • 与Qt框架紧密集成,适合构建图形界面和进行基本的图像操作。

cv::Mat:

  • 主要用于图像处理、计算机视觉和机器学习等领域。
  • 提供丰富的图像处理函数库,适合复杂的图像分析和处理任务。

4. 颜色空间

QImage:

  • 可以使用多种颜色空间,如 Format_RGB32 表示每个像素包含32位数据(RGB + Alpha)。
  • 在不同平台上的颜色格式和排列可能有所不同。

cv::Mat:

  • 通常使用BGR颜色空间(而不是常见的RGB),这是OpenCV的默认颜色格式。
  • 颜色空间转换非常灵活,通过 cv2.cvtColor 函数可以方便地进行颜色空间转换。

格式转换 

1. OpenCV转PySide:

def CV2QT(CV_image):
    """转换 OpenCV cv::Mat 到 QImage"""
    img_rgb = cv2.cvtColor(CV_image, cv2.COLOR_BGR2RGB)  # 转换 BGR 到 RGB
    # 转换图像到QT的QImage格式
    img_height, img_width, channels = img_rgb.shape  # 获取形状
    bytes_per_line = channels * img_width  # 每行字节数
    q_img = QImage(img_rgb.data, img_width, img_height, bytes_per_line, QImage.Format_RGB888)  # 转换成QImage格式

    pixmap = QPixmap.fromImage(q_img)  # 转换成QPixmap格式
    return pixmap

2. PySide转OpenCV:

def QT2CV(QT_image):
    """转换 QImage 到 OpenCV cv::Mat"""
    QT_image = QT_image.convertToFormat(QImage.Format.Format_RGB32)
    width = QT_image.width()
    height = QT_image.height()

    ptr = QT_image.bits()
    arr = np.array(ptr).reshape(height, width, 4)  # 复制数据

    # 转换 RGB32 到 RGB
    return cv2.cvtColor(arr, cv2.COLOR_BGRA2BGR)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/770914.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

昇思25天学习打卡营第15天 | Vision Transformer图像分类

内容介绍: 近些年,随着基于自注意(Self-Attention)结构的模型的发展,特别是Transformer模型的提出,极大地促进了自然语言处理模型的发展。由于Transformers的计算效率和可扩展性,它已经能够训练…

【机器学习】机器学习与图像识别的融合应用与性能优化新探索

文章目录 引言第一章:机器学习在图像识别中的应用1.1 数据预处理1.1.1 数据清洗1.1.2 数据归一化1.1.3 数据增强 1.2 模型选择1.2.1 卷积神经网络1.2.2 迁移学习1.2.3 混合模型 1.3 模型训练1.3.1 梯度下降1.3.2 随机梯度下降1.3.3 Adam优化器 1.4 模型评估与性能优…

Docker镜像加速配置

由于当前运营商网络问题,可能会导致您拉取 Docker Hub 镜像变慢,索引可以配置阿里云镜像加速器。阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 每个人镜像地址都不一样,需要登陆阿里云自行查看,地址在上面&a…

ctfshow-web入门-文件包含(web78、web79、web80、web81)

目录 1、web78 2、web79 3、web80 4、web81 1、web78 存在文件包含函数:include 直接上 php 伪协议,用 php://filter 读文件(flag.php)的源码,payload: ?filephp://filter/readconvert.base64-encode…

轻松实现百度大模型ERNIE对话

该代码直接可用,实现了流式输出,只需要在你自己的开发环境配置百度申请的QIANFAN_AK和QIANFAN_SK即可使用啦。// # 在.env文件中,设置以下内容,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk 不过需要…

Linux Ubuntu 将指定ip添加到DNS

请严格按照如下步骤操作 以ip地址:202.96.134.133 为例 1.修改 /etc/resolv.conf 文件 sudo gedit /etc/resolv.conf 添加 nameserver 8.8.8.8 和 nameserver 202.96.134.133, 如下图方框指定内容: 2.修改 /etc/resolvconf/resolv.conf.d…

Python28-7.1降维算法之LDA线性判别分析

线性判别分析(Linear Discriminant Analysis, LDA)是一种用于模式识别和机器学习的分类和降维技术。LDA通过找到能最大化类别间方差和最小化类别内方差的投影方向,实现样本的降维和分类。 LDA的基本思想 LDA的核心思想是通过线性变换将数据…

Docker学习笔记(一)概念理解

一、什么是docker容器 Docker容器是一种轻量级、可移植的软件封装技术,它允许开发者将应用程序及其依赖、配置文件、运行环境等打包到一个独立的、自包含的执行单元中。容器与虚拟机相似,都提供了隔离的运行环境,但容器更加轻量级&#xff0c…

Echarts折线+柱状图的多y轴

实现效果&#xff1a; 代码&#xff1a; <template><div class"test-echart"><div id"barLineChart" ref"barLineChart" :style"barLineStyle"></div></div> </template> <script> // imp…

MySQL之MHA高可用集群及故障切换

一、MHA概述 MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的mysql高可用环境下故障切换和主从复制的软件。MHA的出现就是为了解决mysql单点故障。Mysql故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障性切换操作。MHA能在故障切换的过程中最大程度…

【路由交换技术】Cisco Packet Tracer基础入门教程(五)

这一期我们来学习端口聚合&#xff0c;这是针对交换机的技术 前言 不知道大家有没有注意到&#xff0c;我们之前的实验在交换机与交换机之间只用一条线连接&#xff0c;像这样 通过今天的学习&#xff0c;我们要用两条线来连接交换机&#xff0c;就像这样&#xff08;为了能…

3D问界—法线空间与应用举例

问题提出&#xff1a;什么是法线空间&#xff0c;有哪些应用的场景&#xff1f; 法线空间&#xff08;Normal Space&#xff09;在计算机图形学中是一个重要的概念&#xff0c;特别是在处理表面法线&#xff08;Normal&#xff09;时常被提及。 1. 法线空间的分类 法线空间是相…

“工控机”是什么?和普通电脑有区别嘛!

在现代工业生产中,有一种特殊的计算机,它不像普通电脑那样被放置于明亮的办公室内,而是常常藏身于机器轰鸣、环境恶劣的工厂车间里,这就是工控机——工业控制计算机的简称。作为工业自动化领域不可或缺的核心设备,工控机不仅承载着监控与数据采集(SCADA)、过程控制、数据…

python 实现docx指定语言翻译(不丢失格式)

我这边有个需求需要把一份docx翻译成指定语言的文档并且保存&#xff0c;研究了下&#xff0c;记录。 首先先安装依赖 pip install python-docx1.1.2 googletrans4.0.0rc1 python-docx是用来读取docx的&#xff0c;googletrans使用来翻译的。 googletrans PyPI 这个是官方文…

【大语言模型系列之Transformer】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

什么是YUV和IPB,PTS和DTS,视频编码解码过程

YUV 是一种在视频处理和压缩中常用的颜色空间。 它将图像的亮度 (Y) 与色度 (U 和 V) 成分分开。 这种分离对视频压缩和广播非常有益&#xff0c; 因为人眼对亮度变化比对颜色变化更敏感。 YUV 组件简介 Y (亮度)&#xff1a;表示图像的亮度或灰度信息。U (色度)&#xff1a;…

每日一练:攻防世界:Hidden-Message

追踪UDP数据流&#xff0c;没有任何隐藏信息&#xff1a; WP&#xff1a; 观察流量包 每个流的唯一的区别就是UDP的源地址srcport的最后一位在变化 都提取出来就是二进制序列 用tshark提取一下 //使用tshark过滤出源端口&#xff0c;使用cut裁取端口的最后一位 tshark -r 8…

[C/C++] -- gdb调试与coredump

1.gdb调试 GDB&#xff08;GNU 调试器&#xff09;是一个强大的工具&#xff0c;用于调试程序。 安装 1. wget http://ftp.gnu.org/gnu/gdb/gdb-8.1.tar.gz 2. tar -zxvf gdb-8.1.1.tar.gz 3. cd gdb-8.1.1 4. ./configure 5. make 6. make install 基础用法 …

git上传文件

git init git add . git commit -m " " git remote add origin 仓库的地址 git push -u origin master 如果出现以下问题 可以用这一句强制上传 git push -f origin master

BME688 环境传感器

型号简介 BME688是博世&#xff08;bosch-sensortec&#xff09;的一款首款具有人工智能 (AI) 和集成高线性度和高精度压力、湿度和温度传感器的气体传感器。它采用坚固而紧凑的 3.0 x 3.0 x 0.9 mm 封装&#xff0c;专为移动和联网应用而开发&#xff0c;在这些应用中&#xf…