【PyQt】QPixmap与numpy.array互转

news2024/11/28 11:39:48

这里给出QPixmapnumpy.ndarray的两条转换(一个是使用PIL.Image而另一个不用),
以及numpy.ndarrayQPixmap两条转换(同样也是用不用PIL.Image的区别)。



代码+运行结果:

from PyQt5.QtCore import QPoint,QRect,Qt
from PyQt5.QtWidgets import QLabel
from PyQt5.QtGui import QPixmap,QImage

import numpy as np
from cv2 import cv2
import sys
from PyQt5.QtWidgets import QApplication


def ToArray_1(pix):#pix是RGBA四通道QPixmap。额外使用PIL.Image模块
	#忘了是哪里看到的,然后翻历史记录死活找不到,作罢
    from PIL import Image
    pImg=Image.fromqpixmap(pix)
    arr=np.array(pImg)
    arr=cv2.cvtColor(arr,cv2.COLOR_RGBA2BGRA)
    return arr

def ToArray_2(pix):#pix是RGBA四通道QPixmap。不使用PIL.Image模块
    #https://deepinout.com/numpy/numpy-questions/700_numpy_qimage_to_numpy_array_using_pyside.html#ftoc-heading-3
    h,w=pix.height(),pix.width()
    buffer = QImage(pix).constBits()
    buffer.setsize(h*w*4)
    arr = np.frombuffer(buffer, dtype=np.uint8).reshape((h,w,4))
    return arr.copy()

def ToPixmap_1(arr):#arr对应四通道图片。额外使用PIL.Image模块
    #https://blog.csdn.net/ielcome2016/article/details/105798279
    from PIL import Image
    arr=cv2.cvtColor(arr,cv2.COLOR_RGBA2BGRA)
    return Image.fromarray(arr).toqpixmap()

def ToPixmap_2(arr):#arr对应四通道图片。不使用PIL.Image模块
    #https://blog.csdn.net/comedate/article/details/121259033
    #https://blog.csdn.net/weixin_44431795/article/details/122016214
    arr=cv2.cvtColor(arr,cv2.COLOR_RGBA2BGRA)
    img=QImage(arr.data, arr.shape[1], arr.shape[0], arr.shape[1]*4, QImage.Format_RGBA8888)
    return QPixmap(img)

def pixShow(pix,title):
    lb=QLabel()
    lb.setPixmap(pix)
    lb.setWindowTitle(title)
    lb.show()
    return lb


if __name__=='__main__':

    app = QApplication(sys.argv)

    wid_0=QLabel("ABCDE")
    wid_0.setStyleSheet("font-size:150px ; background-color:#FF0000")
    wid_0.setWindowTitle('Source')

    grab=wid_0.grab()#grab抓出的图是4通道的
    cv2.imshow('ToArray_1',ToArray_1(grab))
    cv2.imshow('ToArray_2',ToArray_2(grab))
    wid_1=pixShow(ToPixmap_1(ToArray_1(grab)),"ToPixmap_1")
    wid_2=pixShow(ToPixmap_2(ToArray_1(grab)),"ToPixmap_2")
    wid_0.show()

    sys.exit(app.exec())


运行结果


补充:

  1. 上面代码中均是RGBA四通道图片的操作(因为QWidget.grab()抓出来的图是4通不是3通的),有其他应用场景的需要自己调整;
  2. 如果出现彩图变色问题可以尝试使用arr=cv2.cvtColor(arr,cv2.COLOR_RGBA2BGRA)np.array对象进行换色调整。简单查了下貌似是历史遗留问题,背锅侠是openCV

新补充:

  1. 上面函数ToArray_2中,返回的arr必须copy()。别问,问就是一个多小时的黑盒debug。copy的原因是要脱离局部变量buffer的约束(不然就会重复体验到怪异的程序异常+程序崩溃,C语言访问野指针导致程序崩溃的经历已经太多了


小小声

不知道是受了什么影响,对PIL.Image并没什么好感,没记错的话是因为自己曾测试过发现这玩意儿效率很低的来着(所以才尽量绕着走


参考:

  • QPixmap转np.array(无PIL.Image):https://deepinout.com/numpy/numpy-questions/700_numpy_qimage_to_numpy_array_using_pyside.html#ftoc-heading-3
  • np.array转QPixmap:https://blog.csdn.net/ielcome2016/article/details/105798279
  • np.array转QPixmap(无PIL.Image):https://blog.csdn.net/comedate/article/details/121259033
  • np.array转QPixmap(无PIL.Image):https://blog.csdn.net/weixin_44431795/article/details/122016214
  • 为什么OpenCV使用BGR而非RGB格式:https://blog.csdn.net/sgchi/article/details/104475033
  • 为什么openCV使用BRG模式读入图像:https://www.zhihu.com/question/37253195

未经个人同意不得私自转载,本文发布于CSDN:https://blog.csdn.net/weixin_44733774/article/details/134578487

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1266711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何拥有免费的docker镜像仓库

shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 hello,伙伴们,最近在研究devops的事情,发现了很有意思的东西。 就是我们所有…

springboot整合redis+自定义注解+反射+aop实现分布式锁

1.定义注解 import java.lang.annotation.*; import java.util.concurrent.TimeUnit;/** Author: best_liu* Description:* Date: 16:13 2023/9/4* Param * return **/ Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documented public interface RedisLo…

怎么把dwg格式转换pdf?

怎么把dwg格式转换pdf?DWG是一种由AutoCAD开发的二维和三维计算机辅助设计(CAD)文件格式,它的名称是“绘图(Drawing)”的缩写。DWG文件通常包含了设计图纸、模型和元数据等信息,并且被广泛用于工…

工艺系统所管理数字化实践

摘要 本文介绍了上海核工程设计研究院在数字化转型方面的实践,包括业务数字化和管理数字化两个方面。业务数字化方面,该院通过开发小工具改进工作流程。管理数字化方面,该院采用零代码平台集中管理管道力学信息相关模型和数据,并…

Martin Fowler:数字化时代,远程与本地协同工作孰优孰劣?(2)| IDCF

作者:Martin Fowler 译者:冬哥 原文:https://martinfowler.com/articles/remote-or-co-located.html (接上篇 ) 二、大多数人在同地办公时工作效率更高 与软件开发中的许多主题一样,我不能拿 100 个软…

Sectigo通配符证书

Sectigo通配符证书(Wildcard SSL Certificate)是一种特殊类型的SSL证书,它适用于一个主域名及其所有子域名。这意味着,只要子域名在主域名下,就可以使用同一张通配符证书进行加密保护。这为拥有多个子域名的网站提供了…

探究Kafka原理-7.exactly once semantics 和 性能测试

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理🔥如果感觉博主的文章还不错的话,请&#x1f44…

方差分析汇总

一文整理了方差分析的全部内容,包括方差分析的定义(基本思想、检验统计量的计算、前提条件)、方差分析分类(单因素、双因素、多因素、事后多重比较、协方差分析、重复测量方差分析)、方差分析流程(数据格式…

四川天蝶电子商务有限公司真实可靠吗?

随着数字经济的不断发展,抖音电商服务日益成为企业拓展销售渠道、提升品牌影响力的关键一环。在这样的大背景下,四川天蝶电子商务有限公司凭借其专业的服务能力和创新的技术手段,迅速崛起为抖音电商服务领域的领军企业。 四川天蝶电子商务有限…

使用 ZFPlayer 播放视频的注意点

一 静音功能 通过调用系统的AVPlayer.muted来实现的 - (void)setMuted:(BOOL)muted {_muted muted;self.player.muted muted;if (self.audioMuteChange) {self.audioMuteChange(self, muted);}... }播放进度条 /// 滑杆 property (nonatomic, strong, readonly) ZFSliderV…

04、基于高斯分布的异常检测算法

04、基于高斯分布的异常检测算法原理与实践 开始学习机器学习啦,已经把吴恩达的课全部刷完了,现在开始熟悉一下复现代码。对这个手写数字实部比较感兴趣,作为入门的素材非常合适。 数据的严重偏斜往往会导致监督学习算法面临巨大的挑战——…

亚马逊云科技 re:Invent 2023:引领科技前沿,探索未来云计算之窗

文章目录 一、前言二、什么是亚马逊云科技 re:Invent?三、亚马逊云科技 re:Invent 2023 将于何时何地举行四、亚马逊云科技 re:Invent 2023 有什么内容?4.1 亚马逊云科技 re:Invent 2023 主题演讲4.2 亚马逊云科技行业专家探实战 五、更多亚马逊云科技活…

发牌洗牌的简单逻辑

1. 需求分析 1.1 要求实现: 我们能使用一副牌,基本的实现多人炸金花小游戏。 1.2 实现分析: 1、有一副牌: 首先自定义card类,来定义每一张牌;(牌上由花色和数字(1~13)&…

第二十章多线程

线程简介 java语言提供了并发机制,程序员可以在程序中执行多个线程,每一个线程完成一个功能,并与其他线程并发运行。 一个进程是一个包含有自身地址的程序,每个独立执行的程序都称为进程。也就是说每个正在执行的程序都是一个进…

基于QT的俄罗斯方块游戏设计与实现

基于QT的俄罗斯方块游戏设计与实现 摘要:信息时代正处于高速发展中,而电子游戏已经成为人生活中或不可少的消磨工具之一。科技时代在不断地高速发展中,游戏相关编程设计也随着发展变得越来越重要, 俄罗斯方块游戏是一款古老传遍世…

ubuntu22.04新机使用(换源,下载软件,安装显卡驱动,锁屏长亮)

换源 国内有很多Ubuntu的镜像源,包括阿里的、网易的,还有很多教育网的源,比如:清华源、中科大源。推荐使用中科大源,快得很。 /etc/apt/sources.list编辑/etc/apt/sources.list文件, 在文件最前面添加以下条目(操作前…

促进高层次人才创新创业,长沙又在“放大招”

“人才”,寥寥数笔,却勾勒出一座城市的发展核心、创新引擎。大力引进高层次人才,更是城市提升综合实力的有效举措。 11月26日,在长沙市委组织部(市委人才工作局)举办“汇聚磅礴力量 全力建设全球研发中心城…

港科夜闻|2023年全球大学毕业生就业力排名公布,香港科大位列香港第一名

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、2023年全球大学毕业生就业力排名公布,香港科大位列香港第一名。香港科大在泰晤士高等教育2023年全球就业能力大学排名中上升一位至全球第29位,继续位居香港首位。香港科大的毕业生就业能力持续跻身…

水淼采集器-免费水淼采集器下载

在当今数字时代,随着信息的迅猛增长,许多网站管理员面临一个共同而具有挑战性的问题——如何在短时间内获取大量优质内容,以满足用户对信息的不断需求?水淼采集器,作为一个备受瞩目的解决方案,正成为许多人…