opencv-python图片缩放,方法一利用cv2.resize()方法实现,方法二利用源代码方法实现,方法三利用cv2.warpAffine()方法实现

原图:
在这里插入图片描述

方法1.在opencv-python 中我们可以调用cv2.resize(图片变量,(所需要的图片宽,所需要的图片高))

例:

import cv2
img = cv2.imread('image0.jpg')
imgInfo = img.shape # 返回值:高 宽 一个像素点有3个颜色组成 例:(1080,1920,3)
print(imgInfo) 
imgHeight = imgInfo[0]# 图片高度
imgWidth = imgInfo[1]# 图片宽度
# 按比例缩放
dst = cv2.resize(img,(int(imgWidth*0.5),int(imgHeight*0.5)))# cv2.resize(图片变量,(所需要的图片宽,所需要的图片高))
cv2.imshow('image',dst)# 显示比例缩放晚完的图片, cv2.imshow('图片路径',图片变量)
cv2.waitKey()# 等待按键按下,退出图片显示

方法2.我们可以通过利用resize源代码的方式来实现图片的缩放。

我们可以这么来理解:

当我们的源图像的大小是40*40 我们想要获取的图像大小是20 *20,从中我们可以知道大小源图像是新图像的2倍。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yk2COk62-1578751815735)(C:\Users\mck\AppData\Roaming\Typora\typora-user-images\image-20200111212934836.png)]

那我们在源图像中(2,2)的点,在新图像中是什么坐标呢?

我们用到了这个公式:

# 利用源代码的形式缩放图片
# 新坐标x = 原坐标x *(原宽度/新宽度)
# 新坐标y = 原坐标y *(原高度/新高度)
import cv2
import numpy as np
img = cv2.imread('image0.jpg')
(height,width,mode) = img.shape
print(height,width)
newheight = int(height/2)
newwidth = int(width/2)
print(newheight,newwidth)
newimg = np.zeros((newheight,newwidth,3),np.uint8)

for i in range(newheight):
    for j in range(newwidth):
        new_i = int(i*(height*1.0/newheight))
        new_j = int(j*(width*1.0/newwidth))
        newimg[i,j] = img[new_i,new_j]
print(newimg.shape)
cv2.imshow('new',newimg)
cv2.waitKey(0)

输出:

547 730
273 365
(273, 365, 3)

在这里插入图片描述

方法三.利用cv2.warpAffine()方法实现

python中:

cv2.warpAffine(img,M,(rows,cols),flags=cv2.INTER_,borderMode=cv2.BORDER_REFLECT,borderValue=(255,255,255))
废话不多说,先贴上代码

import cv2
import numpy as np
img = cv2.imread('image0.jpg')# 读取图片
cv2.imshow('img',img)# 显示原图片
imgInfo = img.shape# 读取图片形状信息,例(高,宽,3)
height = imgInfo[0]
width = imgInfo[1]
imgCale = np.float32([[0.5,0,0],[0,0.5,0]])# 定义一个2*3的数组工作方式下面会解释
dst = cv2.warpAffine(img,imgCale,(width,height))
cv2.imshow('dst',dst)
cv2.waitKey(0)

工作原理:

[A1 A2 B1],[A3 A4 B2]23的矩阵可以分为22矩阵和2*1矩阵
[A1 A2],[A3 A4]+[B1],[B2]
函数的算法
A1*X+A2*Y+B1 = newX
A2*X+A3*Y+B2 = newY
例[0.5,0,0],[0,0.5,0]
0.5X=newX
0.5Y=newY

结果:
在这里插入图片描述

发布了24 篇原创文章 · 获赞 48 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/xiaokai1999/article/details/103941245
今日推荐