**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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)