zoukankan      html  css  js  c++  java
  • opencv将任意不同大小、不同通道图片展示在同一窗口

    效果如图:

    代码:

    def ManyImgs(scale, imgarray):
        rows = len(imgarray)         # 元组或者列表的长度
        cols = len(imgarray[0])      # 如果imgarray是列表,返回列表里第一幅图像的通道数,如果是元组,返回元组里包含的第一个列表的长度
        # print("rows=", rows, "cols=", cols)
    
        # 判断imgarray[0]的类型是否是list
        # 是list,表明imgarray是一个元组,需要垂直显示
        rowsAvailable = isinstance(imgarray[0], list)
    
        # 第一张图片的宽高
        width = imgarray[0][0].shape[1]
        height = imgarray[0][0].shape[0]
        # print("width=", width, "height=", height)
    
        # 如果传入的是一个元组
        if rowsAvailable:
            for x in range(0, rows):
                for y in range(0, cols):
                    # 遍历元组,如果是第一幅图像,不做变换
                    if imgarray[x][y].shape[:2] == imgarray[0][0].shape[:2]:
                        imgarray[x][y] = cv2.resize(imgarray[x][y], (0, 0), None, scale, scale)
                    # 将其他矩阵变换为与第一幅图像相同大小,缩放比例为scale
                    else:
                        imgarray[x][y] = cv2.resize(imgarray[x][y], (imgarray[0][0].shape[1], imgarray[0][0].shape[0]), None, scale, scale)
                    # 如果图像是灰度图,将其转换成彩色显示
                    if  len(imgarray[x][y].shape) == 2:
                        imgarray[x][y] = cv2.cvtColor(imgarray[x][y], cv2.COLOR_GRAY2BGR)
    
            # 创建一个空白画布,与第一张图片大小相同
            imgBlank = np.zeros((height, width, 3), np.uint8)
            hor = [imgBlank] * rows   # 与第一张图片大小相同,与元组包含列表数相同的水平空白图像
            for x in range(0, rows):
                # 将元组里第x个列表水平排列
                hor[x] = np.hstack(imgarray[x])
            ver = np.vstack(hor)   # 将不同列表垂直拼接
        # 如果传入的是一个列表
        else:
            # 变换操作,与前面相同
            for x in range(0, rows):
                if imgarray[x].shape[:2] == imgarray[0].shape[:2]:
                    imgarray[x] = cv2.resize(imgarray[x], (0, 0), None, scale, scale)
                else:
                    imgarray[x] = cv2.resize(imgarray[x], (imgarray[0].shape[1], imgarray[0].shape[0]), None, scale, scale)
                if len(imgarray[x].shape) == 2:
                    imgarray[x] = cv2.cvtColor(imgarray[x], cv2.COLOR_GRAY2BGR)
            # 将列表水平排列
            hor = np.hstack(imgarray)
            ver = hor
        return ver
    
    img1=cv2.imread("F:/google/qc.jpg")
    img2=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
    imgs=ManyImgs(1,([img1,img2],[img2,img2]))
    cv2.imshow("1",imgs)
    cv2.waitKey(0)
  • 相关阅读:
    mysql_单表查询
    mysql_建表
    MySQL基础
    JS_左边栏菜单
    Vue框架之组件系统
    Vue常用语法及命令
    Django的缓存,序列化,ORM操作的性能
    Django中的form表单
    Django中的auth模块
    AJAX请求提交数据
  • 原文地址:https://www.cnblogs.com/XiaoGao128/p/13938552.html
Copyright © 2011-2022 走看看