赞
踩
目录
仿射变换 (warpAffine 和 getAffineTransform)
透视变换 (warpPerspective 和 getPerspectiveTransform)
极坐标变换 (warpPolar 和 linearPolar)
http://t.csdnimg.cn/i8pqt —— opencv—常用函数学习_“干货“_总(VIP)
散的正在一部分一部分发,不需要VIP。
资料整理不易,有用话给个赞和收藏吧。
在OpenCV中,离散余弦变换(DCT)和其逆变换(IDCT)是常用于图像压缩和处理的技术。DCT将图像数据从时域转换到频域,而IDCT则是将数据从频域转换回时域。OpenCV提供了两个主要函数:dct
和 idct
。
离散余弦变换函数 | |
dct | idct |
执行离散余弦变换 | 执行离散余弦逆变换 |
dct
) 和逆变换 (idct
)- import cv2
- import numpy as np
-
- # 读取图像并转换为灰度图
- image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)
-
- # 将图像转换为浮点型
- image_float = np.float32(image) / 255.0
-
- # 执行离散余弦变换
- dct_image = cv2.dct(image_float)
-
- # 显示DCT变换后的图像
- cv2.imshow('DCT Image', dct_image)
- cv2.waitKey(0)
-
- # 执行离散余弦逆变换
- idct_image = cv2.idct(dct_image)
-
- # 将结果转换回0-255范围的图像
- idct_image = np.uint8(idct_image * 255)
-
- # 显示逆变换后的图像
- cv2.imshow('IDCT Image', idct_image)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
dct
函数:对输入图像进行离散余弦变换。该函数将图像数据从时域转换到频域,通常用于压缩算法,如JPEG压缩。idct
函数:对频域数据进行逆变换,恢复到时域。离散余弦变换在图像压缩中有广泛的应用。例如,在JPEG压缩中,图像被分割成8x8的块,并对每个块执行DCT变换,然后进行量化处理。
- # 读取图像并转换为灰度图
- image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)
- h, w = image.shape
-
- # 将图像转换为浮点型
- image_float = np.float32(image) / 255.0
-
- # 分块处理(8x8)
- block_size = 8
- dct_blocks = np.zeros_like(image_float)
-
- # 执行DCT变换
- for i in range(0, h, block_size):
- for j in range(0, w, block_size):
- block = image_float[i:i+block_size, j:j+block_size]
- dct_block = cv2.dct(block)
- dct_blocks[i:i+block_size, j:j+block_size] = dct_block
-
- # 显示DCT变换后的图像
- cv2.imshow('DCT Blocks', dct_blocks)
- cv2.waitKey(0)
-
- # 执行逆DCT变换
- idct_blocks = np.zeros_like(dct_blocks)
- for i in range(0, h, block_size):
- for j in range(0, w, block_size):
- block = dct_blocks[i:i+block_size, j:j+block_size]
- idct_block = cv2.idct(block)
- idct_blocks[i:i+block_size, j:j+block_size] = idct_block
-
- # 将结果转换回0-255范围的图像
- idct_image = np.uint8(idct_blocks * 255)
-
- # 显示逆变换后的图像
- cv2.imshow('IDCT Blocks', idct_image)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
通过这些示例,可以看到如何使用OpenCV中的DCT和IDCT函数来进行离散余弦变换及其逆变换。根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像处理和压缩任务。
在OpenCV中,几何变换是图像处理中的基本操作,包括旋转、缩放、平移、透视变换等。下面介绍一些常用的几何变换函数及其使用示例。
图像几何变换函数 | ||||
logPolar | warpPolar | linearPolar | getAffineTransform | warpAffine |
对图像进行对数极坐标变换 | 对图像进行极坐标变换 | 对图像进行线性极坐标变换 | 计算仿射变换矩阵 | 对图像进行仿射变换 |
invertAffineTransform | getPerspectiveTransform | warpPerspective | getRotationMatrix2D | |
计算仿射变换矩阵的逆矩阵 | 计算透视变换矩阵 | 对图像进行透视变换 | 计算二维旋转矩阵 |
warpAffine
和 getAffineTransform
)- import cv2
- import numpy as np
-
- # 读取图像
- image = cv2.imread('path_to_image.jpg')
-
- # 获取图像尺寸
- rows, cols, ch = image.shape
-
- # 定义三个点及其对应变换后的点
- pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
- pts2 = np.float32([[10, 100], [200, 50], [100, 250]])
-
- # 计算仿射变换矩阵
- M = cv2.getAffineTransform(pts1, pts2)
-
- # 对图像进行仿射变换
- dst = cv2.warpAffine(image, M, (cols, rows))
-
- cv2.imshow('Affine Transform', dst)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
warpPerspective
和 getPerspectiveTransform
)- # 定义四个点及其对应变换后的点
- pts1 = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
- pts2 = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])
-
- # 计算透视变换矩阵
- M = cv2.getPerspectiveTransform(pts1, pts2)
-
- # 对图像进行透视变换
- dst = cv2.warpPerspective(image, M, (300, 300))
-
- cv2.imshow('Perspective Transform', dst)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
getRotationMatrix2D
)- # 定义旋转中心、角度和缩放因子
- center = (cols // 2, rows // 2)
- angle = 45
- scale = 1.0
-
- # 计算旋转矩阵
- M = cv2.getRotationMatrix2D(center, angle, scale)
-
- # 对图像进行旋转变换
- rotated = cv2.warpAffine(image, M, (cols, rows))
-
- cv2.imshow('Rotated Image', rotated)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
warpPolar
和 linearPolar
)- # 极坐标变换
- polar_image = cv2.warpPolar(image, (cols, rows), (cols//2, rows//2), max(cols, rows) // 2, cv2.WARP_FILL_OUTLIERS)
-
- # 对数极坐标变换
- log_polar_image = cv2.logPolar(image, (cols//2, rows//2), 40, cv2.WARP_FILL_OUTLIERS)
-
- cv2.imshow('Polar Transform', polar_image)
- cv2.imshow('Log Polar Transform', log_polar_image)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
这些示例展示了如何使用OpenCV中的几何变换函数来处理图像。根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像处理任务。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。