python opencv 显示图片 灰度图片 合并图片 保存图片 纵向合并

**

python opencv 显示图片 灰度图片 合并图片 保存图片 纵向合并

**
python 高级程序设计作业4 从昨天中午搞到今天凌晨,踩了好多坑,但是收获比较大。不得不说这个网站真的坑,有些东西就是在犄角旮旯里面,不过好在在下坚持了一下,完成了。

我能也不藏着掖着,全部代码在下面,可以直接拿来用,只要把

   ar_img1_hwc = cv2.imread('000000000872.jpg')    # cv2.imread()读取通道的顺序为BGR    # 640,621,3
    ar_img2_hwc = cv2.imread('000000002431.jpg')    # cv2.imread()读取通道的顺序为BGR    # 640,457,3

只要把这一部分代码的路径改一下就好啦

完整代码:

import cv2
import numpy as np


def img_show(ar_img): # 显示图片
    # 三维ndarray,分别代表行、列、通道(BGR),数组形状(高度,宽度,通道数)
    # cv2.namedWindow('实验4.4', cv2.WINDOW_NORMAL)  # 显示窗口
    cv2.namedWindow('sy4.4')  # 显示窗口
    cv2.imshow('sy4.4', ar_img)  # 窗口内显示图像
    cv2.waitKey(0)  # 等待用户按任意键关闭窗口
    cv2.destroyAllWindows()  # 关闭窗口

def img_turn_gray(ar_img): # 转变成灰度图片,显示图片
    for i in range(len(ar_img)):
        for j in range(len(ar_img[0])):
            x=float(ar_img[i][j][0])*0.114+float(ar_img[i][j][1])*0.587+float(ar_img[i][j][2])*0.229
            # x.append(temp) #len(x)==292480=640*457
            ar_img[i][j][0]=x
            ar_img[i][j][1]=x
            ar_img[i][j][2]=x
    return ar_img

def img_merge(ar_img1,ar_img2): # 合并图片并且保存
    x=[]
    dif=abs(len(ar_img1[0])-len(ar_img2[0])) #计算G的差值
    temp = np.random.randint(0, 1, size=[dif, 3]) #创建一个shape为(dif,3)的一个全为0的array:temp

    for i in range(len(ar_img2)): #遍历每一个G小的那个图片的每一行(B)
        print(i)
        for j in range(dif):
            ar_img_temp = np.vstack((ar_img2[i], temp)) #遍历每一个B的每一个G,将其与temp纵向合并,生成一个(621,3)的ar_img_temp
        print(ar_img_temp)
        x.append(ar_img_temp) #将ar_img_temp,也就是小的图片加了好多列的某一行加到列表里面
    x=np.array(x) #将列表转换成array
    y=np.vstack((ar_img1, x)) #ar_img1,生成一个(1280,621,3)的y

    print('shape:', ar_img1.shape)
    print('shape:', x.shape)
    print('shape:', y.shape)

    cv2.imwrite("merge.png", y) #这一步必须要写,是将我们这一个array保存为图片,不然等一下显示就出问题了
    '''不然会报错:cv2.error: OpenCV(4.5.5) D:/a/opencv-python/opencv-python/opencv/modules/highgui/src/precomp.hpp:155: error: 
    (-215:Assertion failed) src_depth != CV_16F && src_depth != CV_32S in function 'convertToShow'''
    ar_img = cv2.imread('merge.png')

    return ar_img



if __name__ == '__main__':
    ar_img1_hwc = cv2.imread('000000000872.jpg')    # cv2.imread()读取通道的顺序为BGR    # 640,621,3
    ar_img2_hwc = cv2.imread('000000002431.jpg')    # cv2.imread()读取通道的顺序为BGR    # 640,457,3

    ar_img1_hwc=img_turn_gray(ar_img1_hwc)
    ar_img2_hwc=img_turn_gray(ar_img2_hwc)
    # img_show(ar_img1_hwc)
    img_show(ar_img2_hwc)

    ar_img3_hwc=img_merge(ar_img1_hwc,ar_img2_hwc)
    img_show(ar_img3_hwc)



两张图片:

在这里插入图片描述
在这里插入图片描述
合并图片:

在这里插入图片描述

一点知识:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值