python打开opencv图像与QImage图像及其转化

目录

1、Qimage图像

2、opencv图像

3、python打开QImage图像通过Qlabel控件显示

4、python打开QImage图像通过opencv显示

5、python打开opencv图像并显示

6、python打开opencv图像通过Qlabel控件显示


1、Qimage图像

QImage是Qt库中用于存储和处理图像的类。它可以存储多种格式的图像,包括RGB、RGBA、CMYK等。

QImage使用一个一维数组来存储像素数据。每个像素由红、绿、蓝三个分量组成,每个分量的取值范围为0到255。如果图像是彩色的,则每个像素还包含一个alpha通道,表示透明度,取值范围也为0到255。

在QImage中,像素数据的存储顺序是从左到右、从上到下。对于宽度为w和高度为h的图像,像素数据的起始地址为(w * h)个字节。每个像素的数据占用4个字节,即32位。因此,整个图像的数据大小为w * h * 4个字节。

以下是一个简单的示例代码,演示如何创建一个空的QImage对象并设置其大小:

python 复制代码
from PyQt5.QtGui import QImage

# 创建一个空的QImage对象,大小为100x100像素,格式为RGB32
image = QImage(100, 100, QImage.Format_RGB32)

# 检查图像是否为空
if image.isNull():
    print("Image is null")
else:
    print("Image is not null")

图:原始图像

2、opencv图像

OpenCV使用NumPy数组来存储图像数据。在OpenCV中,每个图像都是由一个三维的NumPy数组表示的。该数组包含三个维度:高度、宽度和通道数。对于彩色图像,通道数为3,分别代表红色、绿色和蓝色通道。对于灰度图像,通道数为1。

每个像素值的范围取决于图像的数据类型。通常情况下,8位无符号整数(uint8)被用于RGB图像,其中每个通道的取值范围是0到255。如果要将图像保存到文件中,则需要将其转换为适当的数据类型和范围。

3、python打开QImage图像通过Qlabel控件显示

python 复制代码
import numpy as np
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QApplication, Qlabel

# 创建一个QGuiApplication对象
app = QApplication([])
# 加载图像文件
image = QImage(r"d:\Pictures\Saved Pictures\mv.jpg")

# 将QImage转换为QPixmap对象
pixmap = QPixmap.fromImage(image)

# 创建一个标签对象并将QPixmap传递给它
label = QLabel()
label.setPixmap(pixmap)

# 显示标签
label.show()
# 运行应用程序的事件循环
app.exec_()
复制代码

4、python打开QImage图像通过opencv显示

python 复制代码
import numpy as np
from PyQt5.QtGui import QImage
import cv2
import matplotlib.pyplot as plt
def qimage_to_opencv(qimage):
    # 将QImage转换为numpy数组
    buffer = qimage.bits().asstring(qimage.byteCount())
    img_arr = np.frombuffer(buffer, dtype=np.uint8).reshape((qimage.height(), qimage.width(), 4))
    return img_arr

# 加载图像文件
image = QImage(r"d:\Pictures\Saved Pictures\mv.jpg")
cvimg=qimage_to_opencv(image)
# 将图像从BGR色彩空间转换为RGB色彩空间
img_rgb = cv2.cvtColor(cvimg, cv2.COLOR_BGR2RGB)

# 使用matplotlib显示图像
plt.imshow(img_rgb)
plt.title('Image')
plt.show()

5、python打开opencv图像并显示

python 复制代码
import cv2
import matplotlib.pyplot as plt
# 读取图像文件
img = cv2.imread(r"d:\Pictures\Saved Pictures\mv.jpg")

# 将图像从BGR色彩空间转换为RGB色彩空间
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 使用matplotlib显示图像
plt.imshow(img_rgb)
plt.title('Image')
plt.show()

6、python打开opencv图像通过Qlabel控件显示

python 复制代码
import cv2
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QApplication, QLabel
import sys
def CvMatToQImage(cvMat):
    if len(cvMat.shape) == 2:
        # 灰度图是单通道,所以需要用Format_Indexed8
        rows, columns = cvMat.shape
        bytesPerLine = columns
        return QImage(cvMat.data, columns, rows, bytesPerLine, QImage.Format_Indexed8)
    else:
        rows, columns, channels = cvMat.shape
        bytesPerLine = channels * columns
        return QImage(cvMat.data, columns, rows, bytesPerLine, QImage.Format_RGB888).rgbSwapped()
# 读取图像文件
img = cv2.imread(r"d:\Pictures\Saved Pictures\mv.jpg")
# 加载图像文件
qimg=CvMatToQImage(img)
# 创建一个QGuiApplication对象
app = QApplication(sys.argv)

# 创建QLabel并设置其Pixmap
label = QLabel()
pixmap = QPixmap.fromImage(qimg)
label.setPixmap(pixmap)
# 显示标签
label.show()
# 运行应用程序的事件循环
app.exec_()
相关推荐
数据智能老司机10 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机11 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机11 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机11 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i12 小时前
drf初步梳理
python·django
每日AI新事件12 小时前
python的异步函数
python
这里有鱼汤13 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook1 天前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室1 天前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三1 天前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试