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

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

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

1. 数据结构

PySide:

  • QImageQPixmap 是 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:

python 复制代码
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:

python 复制代码
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)
相关推荐
ZzT43 分钟前
怎么做才不会被 AI 替代?
人工智能·程序员
道友可好1 小时前
从今天开始:你的第一个 Harness Engineering 实践
前端·人工智能·后端
呱呱复呱呱1 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
小姜前线技术2 小时前
AI回答代码块高亮加一键复制
人工智能
洛阳泰山2 小时前
从 0 到 1.6K Star:一个 Java 开源项目的增长复盘
人工智能·后端·开源
米小虾3 小时前
Agent Skill 设计模式完全指南
人工智能·agent
饼干哥哥3 小时前
保姆级教程:用Image2 + Seedance2.0 做长视频,以品牌广告为例
人工智能
米小虾4 小时前
Agent Skill 规范与 Skill-Creator 核心思想
人工智能·agent
ZhengEnCi4 小时前
09e-斯坦福CS336作业四:大规模语言模型训练数据收集与处理
人工智能
oil欧哟4 小时前
Codex 最佳实践(超级长文):先搞懂 AI,再用好 AI
前端·人工智能·后端