**
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)
两张图片:
合并图片:
一点知识: