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

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

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

1. 数据结构

PySide:

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

OpenCV:

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

2. 数据存储方式

QImage:

  • 支持多种图像格式(例如 Format_RGB32、Format_ARGB32、Format_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)
相关推荐
NeoGressAI外贸数字化几秒前
外贸独立站robots.txt怎么写:6个AI爬虫放行规则
人工智能·爬虫
米软科技20 分钟前
数字化转型:多元化集团如何构建高效的AI数字化中台?
大数据·人工智能
威哥爱编程20 分钟前
Python 智能体开发实战 05:一问教材内容它就编?先把答案从你自己的资料里检索出来
python·agent
幼儿园蛋小黄21 分钟前
从 STM32N647 的 AI 部署入门嵌入式:一条可落地的学习路线
人工智能·stm32·学习
java_prinln25 分钟前
RAG 面试题介绍
python·agent
Leo.yuan27 分钟前
Dora企业级Data Agent应用指南:存量BI复用、私有化部署与权限管理
大数据·人工智能
威哥爱编程28 分钟前
Python 智能体开发实战 06:一个函数里塞了八百行?用状态机把批改流程拆成能回退的步骤
python·agent
火山引擎开发者社区30 分钟前
从代码执行到任务持续运行:企业级 Agent Sandbox 的云原生实践
人工智能
Nablai33 分钟前
LX系列多国语言能力技术解析:ESP32双栈架构下的语种策略设计
人工智能·架构
老牛日常随笔1 小时前
微软开源Flint Chart:AI画图表总是画不对?让编译器来画,AI只写数据就行
人工智能·microsoft