**shape[0] =图像的高
shape[1] =图像的宽
shape[2] = 图像的图像通道数量
np.zeros(shape, dtype=float, order=‘C’)
示例:
import numpy as np
Zero = np.zeros(10)
print(Zero)
print(Zero.shape)
输出:
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
(10,)**
方法1:
利用cv2.resize()函数实现,很简单,直接调用resize函数就能实现
代码:
import cv2 as cv
img = cv.imread('d://python1//image//1.jpg',1) #参数1:获取图片路径 参数2:1表示彩色 0:表示灰色
imageInfo = img.shape
'''
image[0] =图像的高
image[1] =图像的宽
image[2] = 图像的图像通道数量
'''
hight = imageInfo[0] #图片高
width = imageInfo[1] #图片宽
mode = imageInfo[2] #图像通道数量3 R G B
#缩放图像的比例 缩小原图的一半
dstHeight = int(hight * 0.5)
dstWidth = int(width * 0.5)
#调整图片的大小
dst = cv.resize(img,(dstWidth,dstHeight))
#显示图片
cv.imshow('image1',img)
cv.imshow('image',dst)
cv.waitKey(0)
运行结果:
可以看到输出的图片一张是原图一张是缩进原图的一半
方法2:最近临域插值法
原图:10 * 20 缩放后:5 * 10
缩放后图像上的的点都来自原图像上的点
缩放后图像的(1,2)点 通过原图像(2,4)点得到
计算公式:
缩放后图片的x坐标 通过原图片上的x坐标得到
那么缩放后图片的x = 缩放后图片上x * (原图上的右下角x坐标 除以 缩放后图片的右下角x坐标)
那么缩放后图片的y = 缩放后图片上y * (原图上的右下角y坐标 除以 缩放后图片的右下角坐标)
例如:
原图 10 * 20 右下角 x坐标是10 右下角y坐标是20
缩放 5 * 10 右下角 x坐标5 右下角y坐标是10
给定任意个缩放后图像的坐标(1,2)
根据公式 1 * (10/5)得到2
2 * (20/10)得到4
以上就是最近临域插值算法
大概思路:
1.获得原图的宽和高
2.获得缩放后图的宽高
3.遍历缩放后图的每一个像素点
4.通过得到的每一个像素点的x坐标和y坐标,利用公式得到一个x和y
5.通过得到的x和y,在原图上得到一个像素点
6.最终当遍历完每一个像素点就得到缩放的图
代码:
import numpy as np
import cv2 as cv
img = cv.imread('d://python1//image//1.jpg',1)
imageInfo = img.shape
'''
image[0] =图像的高
image[1] =图像的宽
image[2] = 图像的图像通道数量
'''
#1.原图宽和高
Hight = imageInfo[0] #高
Width = imageInfo[1] #宽
#2.缩放图的宽和高
dstHight = int(Hight / 2) #缩放图高
dstWidth = int(Width / 2) #缩放图宽
#创建一个数组
dstImage = np.zeros((dstHight,dstWidth,3),np.uint8) #每一个像素点类型是uint8 范围是[0:255]
#3.遍历缩放图的每一个像素点
for x in range(0,dstHight):
for y in range(0,dstWidth):
#4.利用公式求得新的x和y坐标
xNew = int(x * (Width * 1.0 / dstWidth))
yNew = int(y * (Hight * 1.0 / dstHight))
#5.通过获得新的坐标,在原图上获取该像素点
dstImage[x,y] = img[xNew,yNew]
#6.得到缩放好的图
cv.imshow('image',dstImage)
cv.imshow('image1',img)
cv.waitKey(0)
运行结果:
在这里插入图片描述
3.
import cv2
import numpy as np
img = cv2.imread('d://python1//image//1.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
matShift = np.float32([[0.5,0,0],[0,0.5,0]]) #2行3列
dst = cv2.warpAffine(img,matShift,(int(width/2),int(height/2)))
'''
[[0.5,0,0],
[0,0.5,0]]
二行三列矩阵 拆分成二行二列 和二行一列
二行二列: A
[[0.5,0],
[0,0.5]]
二行一列 B
[[0],
[0]]
二行一列 C
xy
缩放公式:
A*C+B = [[0.5*x+0*y],[0*x+0.5*y]] + [[0],[0]]
= [[0.5*x],[0.5*y]]
'''
cv2.imshow('image1',img)
cv2.imshow('image2',dst)
cv2.waitKey(0)