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)
相关推荐
Su米苏7 分钟前
Spring AI 中MCP 与普通 @Tool的区别
java·人工智能·spring
美狐美颜sdk9 分钟前
直播APP源码可以直接接入视频美颜sdk吗?技术方案详解
android·人工智能·音视频·美颜sdk·直播美颜sdk
问商十三载19 分钟前
AI引擎生成式优化实践:刑事辩护律师团队IP构建
大数据·人工智能
冬奇Lab35 分钟前
LLM 驱动的自动化测试系列(08):移动端自动化(四)——AppAgent:解析树与视觉特征的结合
人工智能·测试
蜗牛互联网36 分钟前
Java 17 HttpClient调用文件转写API的超时与失败回退
java·人工智能·后端
谢亮_vipxieliang39 分钟前
Kubernetes 的“操作系统化”:从容器编排到 AI 基础设施控制平面
人工智能·平面·kubernetes
云上先途140 分钟前
AI搜索排名优化,需要重点布局哪些关键词和内容形式?
人工智能·chatgpt
冬奇Lab1 小时前
一天一个开源项目(第232篇):DSH Desktop —— 把桌面壳本身也做成一个插件,30k+ Stars 的 DeepSeek Harness 桌面客户端
人工智能·开源·资讯
揽秀亭长1 小时前
从音频到五线谱|扒谱过程中的关键技术环节
人工智能·音视频