图像切分
程序员文章站
2024-03-16 11:07:22
...
1,前言
图像本质上就是一个二维或者三维矩阵,灰度图是二维矩阵,彩色图是三维矩阵,如果把图像按照下面的方式重新组合,就可以得到多张图片。
第一步:先将图片按照竖的方式均匀剪碎
第二步:将剪碎的纸条,奇数位置的重新组合成新的图片,偶数位置的重新组合成新的图片。
第三步:得到两张图片。
第四步:将上面两张图片黏好,然后分别按照横的方式剪成条状,同样按照隔着位置重新组合的方式,变成四张图片。
2,代码实现
import cv2
import numpy as np
def oneToFour(img_path):
imArray = cv2.imread(img_path)
h,w,c = imArray.shape
# 一共4个图像,1-左上,2-右上,3-左下,4-右下
# 可以发现,如果h,w是偶数的话,4张子图的大小,如果是奇数,就会出现有一些图更大1个像素
h1,w1 = h//2+h%2,w//2+w%2
h2,w2 = h//2+h%2,w//2
h3,w3 = h//2,w//2+w%2
h4,w4 = h//2,w//2
# 创建4个子图,里面的像素值都为0
a1=np.zeros([h1,w1,c],dtype=np.uint8)
a2=np.zeros([h2,w2,c],dtype=np.uint8)
a3=np.zeros([h3,w3,c],dtype=np.uint8)
a4=np.zeros([h4,w4,c],dtype=np.uint8)
'''
注释的这块代码也能用,和下面4行的功能一样
for i in range(0,h):
for j in range(0,w):
if i%2==0 and j%2==0:#全偶
a1[i//2,j//2,:]=imArray[i,j,:]
elif i%2==0 and j%2!=0:#偶基
a2[i//2,(j-1)//2,:]=imArray[i,j,:]
elif i%2!=0 and j%2==0:#基偶
a3[(i-1)//2,j//2,:]=imArray[i,j,:]
else:#基基
a4[(i-1)//2,(j-1)//2,:]=imArray[i,j,:]
'''
a1 = imArray[::2,::2,:] # n[::2]表示取奇数,n[1::2]表示取偶数
a2 = imArray[::2,1::2,:]
a3 = imArray[1::2,::2,:]
a4 = imArray[1::2,1::2,:]
cv2.imwrite('girl_1.jpg',a1)
cv2.imwrite('girl_2.jpg',a2)
cv2.imwrite('girl_3.jpg',a3)
cv2.imwrite('girl_4.jpg',a4)
path = 'girl.jpg'
oneToFour(path)
变成下面这四个子图。
上一篇: mac环境下JDK安装教程
下一篇: 类和对象