[pyqt5]opencv QPixmap QImage相互转换

这篇具有很好参考价值的文章主要介绍了[pyqt5]opencv QPixmap QImage相互转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提前约定:

pixmap是QPixmap类型的变量

image是QImage类型的变量

QPixmap=>QImage

image = pixmap.toImage()

QImage=>QPixmap

pixmap=QPixmap.fromImage(image)

Opencv=>Qimage

方法一:

def Opencv2QImage(opencv_img):
    width = opencv_img.shape[1] #获取图片宽度
    height = opencv_img.shape[0]  #获取图片高度
    pixmap = QPixmap(width, height) #根据已知的高度和宽度新建一个空的QPixmap,
    image = pixmap.toImage()  #将pximap转换为QImage类型的qimg
    #循环读取cv_image的每个像素的r,g,b值,构成qRgb对象,再设置为qimg内指定位置的像素
    for row in range(0, height):
        for col in range(0,width):
            b = opencv_img[row,col,0]
            g = opencv_img[row,col,1]
            r = opencv_img[row,col,2]
            pix = qRgb(r, g, b)
            image.setPixel(col, row, pix)
    return image #转换完成,返回

方法二

def OpencvToQImage(data):
    # 8-bits unsigned, NO. OF CHANNELS=1
    if data.dtype == np.uint8:
        channels = 1 if len(data.shape) == 2 else data.shape[2]
    if channels == 3: # CV_8UC3
        # Copy input Mat
        # Create QImage with same dimensions as input Mat
        img = QImage(data, data.shape[1], data.shape[0], data.strides[0], QImage.Format_RGB888)
        return img.rgbSwapped()
    elif channels == 1:
        # Copy input Mat
        # Create QImage with same dimensions as input Mat
        img = QImage(data, data.shape[1], data.shape[0], data.strides[0], QImage.Format_Indexed8)
        return img
    else:
        print("ERROR: numpy.ndarray could not be converted to QImage. Channels = %d" % data.shape[2])
        return QImage()

方法三(推荐):

def Opencv2QImage(cvimg):
    height, width, depth = cvimg.shape
    cvimg = cv2.cvtColor(cvimg, cv2.COLOR_BGR2RGB)
    cvimg = QImage(cvimg.data, width, height, width * depth, QImage.Format_RGB888)
    return cvimg

Qimage=>Opencv

def QImage2Opencv(qimg):
    
    tmp = qimg
    #使用numpy创建空的图象
    cv_image = numpy.zeros((tmp.height(), tmp.width(), 3), dtype=numpy.uint8)
  
    for row in range(0, tmp.height()):
        for col in range(0,tmp.width()):
            r = qRed(tmp.pixel(col, row))
            g = qGreen(tmp.pixel(col, row))
            b = qBlue(tmp.pixel(col, row))
            cv_image[row,col,0] = b
            cv_image[row,col,1] = g
            cv_image[row,col,2] = r
    
    return cv_image

QPixmap=>Opencv

def QPixmap2Opencv(pixmap):

    qimg = pixmap.toImage()
    temp_shape = (qimg.height(), qimg.bytesPerLine() * 8 // qimg.depth())
    temp_shape += (4,)
    ptr = qimg.bits()
    ptr.setsize(qimg.byteCount())
    result = np.array(ptr, dtype=np.uint8).reshape(temp_shape)
    result = result[..., :3]
    return result

Opencv=>QPixmap

可以现将Opencv转Qimage,然后把Qimage转Qpixmap文章来源地址https://www.toymoban.com/news/detail-521522.html

到了这里,关于[pyqt5]opencv QPixmap QImage相互转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【python】软件开发——PyQt5、Qt Designer、信号与槽机制、计算器实现

    PyQt5 是一个基于 Python 的 GUI 框架,用于创建跨平台的桌面应用程序。它是 Qt 库的 Python 绑定,结合了 Python 的简洁和易用性以及 Qt 框架的强大功能。 Qt 是一个流行的 C++ 跨平台应用程序开发框架,提供了丰富的图形界面组件、网络通信、数据库访问、多线程等功能。PyQt5 允许

    2024年02月04日
    浏览(44)
  • python pyqt5与opencv 遇到的那些坑,pyqt5页面搭建,设置pyqt5设置背景图

    设置pyqt5的背景图片,可以设置一个lable控件,将控件至于底层,然后设置他的背景图 注意路径 解决代码 使用Qt Desiggnei 绘制界面后转换成py代码后 最好不要在生成的py页面代码添加 信号槽,到时候页面改动比较麻烦 转换代码 pyuic5 -o 【转换后的.py】 【UI界面的.ui】 推荐的方

    2024年02月09日
    浏览(59)
  • c++ opencv中unsigned char *、Mat、Qimage互相转换

    unsigned char * 转Mat void * 转Qimage qimage转Mat Mat转Qimage

    2024年02月03日
    浏览(62)
  • PyQt5+Qt设计师初探

            在上一篇文章中我们搭建好了PyQt5的开发环境,打铁到趁热我们基于搭建好的环境来简单实战一把 PyQt5包括的主要模块如下。 QtCore模块——涵盖了包的核心的非GUI功能,此模块被用于处理程序中涉及的时间、文件、目录、数据类型、文本流、链接、QMimeData、线程或

    2024年02月07日
    浏览(47)
  • mac python3.9安装pyqt5、qt5、pyqt5-tools

    pyqt6安装参考 PyQT6:看这一篇就够了 python PyQt6 常用操作以及常见问题解决 pycharm配置tools 参考链接 以下pip命令自行更具自己环境选择pip或pip3 在安装pyqt前必须先安装sip包 完成sip的安装后,安装pyqt和pyqt-tools, 可以直接使用命令: 若是使用pip3安装报错 AttributeError: module ‘sipb

    2024年02月14日
    浏览(47)
  • Qt+OpenCV显示图片(Mat转QImage然后显示在QLabel上)

    此篇主要是记录一下如何将OpenCV集成得到Qt Creator中,并将OpenCV的Mat对象转换为QImage并使用qt的api显示图片 a.使用Qt Creator开发工具集成OpenCV,在.pro文件中配置环境即可,如下图所示 b.将Mat对象转为QImage对象并使用Qt显示出来的步骤如下: 1.将使用OpenCV imread函数加载一张图片 2.将

    2024年02月11日
    浏览(48)
  • 基于opencv和PyQt5的人脸识别

    目    录 一、准备工作 二、分割任务 三、代码实现阶段 1、基于opencv读取照片 2、在图片上绘制矩形 3、在读取照片成功的前提下理解视频的本质,读取视频 4、在视频上绘制矩形 5、调用人脸识别模块  6、动态调整矩形,让矩形通过人脸识别算法追踪人脸 7、调用Qt组件,创

    2024年02月03日
    浏览(52)
  • 【PyQt5】Qt Designer系列-----tableWidget部件设置使用教程

    注意不要选错部件tableView了!!! (1)选中tableWidget部件右键“编辑项目”打开 (2)设置行、列的间隔 (3)去掉行或列索引 (4)设置列左对齐或居中(默认居中) (5)设置标题之间的间隔 选中tableWidget部件右键“改变样式表” (1)设置选中显示背景颜色 (2)设置拉条

    2024年02月16日
    浏览(57)
  • PyQt5将.ui文件转换为.py文件的两种方法

    PyQt5是一个流行的Python库,用于创建图形用户界面(GUI)应用程序。在PyQt5中,可以使用Qt Designer工具创建GUI界面,并将其保存为.ui文件。然后,可以使用两种方法将.ui文件转换为.py文件,以便在Python代码中使用。 方法一:使用PyUIC工具 PyQt5附带了一个命令行工具 called pyuic5,

    2024年02月06日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包