欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

图像切分

程序员文章站 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)

图像切分

变成下面这四个子图。

图像切分 图像切分图像切分图像切分

 

相关标签: python 图像识别