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 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
以后不吃煲仔饭24 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师25 分钟前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
前端拾光者29 分钟前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化
程序猿阿伟30 分钟前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链
傻啦嘿哟1 小时前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
大数据编程之光1 小时前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
初九之潜龙勿用1 小时前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
B站计算机毕业设计超人1 小时前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化
Dola_Pan1 小时前
C语言:数组转换指针的时机
c语言·开发语言·算法