OpenCV-16图像的基本变换

一、图像的放大与缩小

1. 对小狗图片进行缩放

使用API----resize(src, dsize, [,dst,[fx[,fy[,interpolation]]]])

src:要缩放的图像。

dsize:缩放之后的图像大小,元组和列表表示都可以。

dst:可选参数,缩放之后的输出图片。

fx,fy:x轴与y轴的缩放比,即宽度与高度的缩放比。

interpolation:插值算法,只要包括以下四种:

1)INTER_NEAREST, 邻近查找,速度快,效果差

2)INTER_LINEAR, 双线性插值,使用原图中的4个点进行插值,为默认的

3)INTER_CUBIC, 三次插值,原图纸的16个点。

4)INTER_AREA, 区域插值,效果最好,时间最长。

示例代码如下所示:

import cv2
import numpy as np


dog = cv2.imread("dog.png")
cat = cv2.imread("cat.png")
print(dog.shape)
print(cat.shape)

# 把狗缩放的和猫一样大
new_dog = cv2.resize(dog, (559, 372))   # 先填宽度再填高度
# shape显示中行为高度,列为宽度   后面参数可以默认
print(new_dog.shape)
cv2.imshow("new_dog", np.hstack((cat, new_dog)))
cv2.imshow("dog", dog)
print(dog.__sizeof__())
print(new_dog.__sizeof__())

cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下所示:

通过__sizeof__我们可以查看旧的小狗图像和新的小狗图像所占内存大小。

可以看到,经过resize操作后,小狗的图像的宽和高降低,所占内存空间减小。 

2. 比较不同算法下的resize操作

new_dog1 = cv2.resize(dog, (800, 800), interpolation = cv2.INTER_NEAREST)   # 先填宽度再填高度
new_dog2 = cv2.resize(dog, (800, 800), interpolation = cv2.INTER_LINEAR)    # 先填宽度再填高度
new_dog3 = cv2.resize(dog, (800, 800), interpolation = cv2.INTER_CUBIC)    # 先填宽度再填高度
new_dog4 = cv2.resize(dog, (800, 800), interpolation = cv2.INTER_AREA)    # 先填宽度再填高度

cv2.imshow("new_dog", np.hstack((cat, new_dog)))
cv2.imshow("dog1", new_dog1)
cv2.imshow("dog2", new_dog2)
cv2.imshow("dog3", new_dog3)
cv2.imshow("dog4", new_dog4)

 我们可以比较四种不用的算法,一般来说cv2.INTER_AREA效果最好。

3. 按照x轴和y轴的比例进行缩放

此时dsize为None,建议填写关键字参数

new_dog5 = cv2.resize(dog, dsize=None, fx=0.5, fy=0.5)

此时得到的小狗图片是之前的一般大小。

综合演示代码如下所示:

import cv2
import numpy as np


dog = cv2.imread("dog.png")
cat = cv2.imread("cat.png")
print(dog.shape)
print(cat.shape)

# 把狗缩放的和猫一样大
new_dog = cv2.resize(dog, (559, 372))   # 先填宽度再填高度
# shape显示中行为高度,列为宽度   后面参数可以默认
print(new_dog.shape)
# 比较四种算法下的小狗照片的缩放
new_dog1 = cv2.resize(dog, (800, 800), interpolation = cv2.INTER_NEAREST)   # 先填宽度再填高度
new_dog2 = cv2.resize(dog, (800, 800), interpolation = cv2.INTER_LINEAR)    # 先填宽度再填高度
new_dog3 = cv2.resize(dog, (800, 800), interpolation = cv2.INTER_CUBIC)    # 先填宽度再填高度
new_dog4 = cv2.resize(dog, (800, 800), interpolation = cv2.INTER_AREA)    # 先填宽度再填高度
# 按照x轴和y轴进行缩放
new_dog5 = cv2.resize(dog, dsize=None, fx=0.5, fy=0.5)


cv2.imshow("new_dog", np.hstack((cat, new_dog)))
cv2.imshow("dog1", new_dog1)
cv2.imshow("dog2", new_dog2)
cv2.imshow("dog3", new_dog3)
cv2.imshow("dog4", new_dog4)
cv2.imshow("dog5", new_dog5)
print(dog.__sizeof__())
print(new_dog.__sizeof__())

cv2.waitKey(0)
cv2.destroyAllWindows()

相关推荐

  1. Opencv | 图像几何变换

    2024-01-07 07:26:02       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-07 07:26:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-07 07:26:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-07 07:26:02       87 阅读
  4. Python语言-面向对象

    2024-01-07 07:26:02       96 阅读

热门阅读

  1. 【LeetCode】1341. 电影评分

    2024-01-07 07:26:02       59 阅读
  2. SSH远程连接

    2024-01-07 07:26:02       61 阅读
  3. Git使用

    Git使用

    2024-01-07 07:26:02      63 阅读
  4. CSS中的object-fit和background-size

    2024-01-07 07:26:02       57 阅读
  5. Crow:run的流程3 接受http连接请求do_accept

    2024-01-07 07:26:02       67 阅读
  6. 数仓工具—Hive进阶之StorageHandler(23)

    2024-01-07 07:26:02       66 阅读
  7. 什么是神经网络?

    2024-01-07 07:26:02       54 阅读
  8. Android 屏蔽下拉状态栏(StatusBar)

    2024-01-07 07:26:02       51 阅读
  9. [设计模式 Go实现] 结构型~适配器模式

    2024-01-07 07:26:02       50 阅读
  10. JDBC*

    2024-01-07 07:26:02       46 阅读
  11. Python高级用法:装饰器用于缓存

    2024-01-07 07:26:02       64 阅读
  12. 前端缓存的位置

    2024-01-07 07:26:02       53 阅读