微信网站开发服务外包,2345网址导航中国最好的网址站,网站登录页面模板,网站建设案例赏析目录 图像的缩放
图像的平移
图像的旋转
图像的裁剪
图像的翻转 图像的缩放
OpenCV中使用cv2.resize()函数进行缩放#xff0c;格式为#xff1a;
resize_imagecv2.resize(image,(new_w,new_h),插值选项)
其中image代表的是需要缩放的对象#xff0c;(new_w,new_h)表…目录 图像的缩放
图像的平移
图像的旋转
图像的裁剪
图像的翻转 图像的缩放
OpenCV中使用cv2.resize()函数进行缩放格式为
resize_imagecv2.resize(image,(new_w,new_h),插值选项)
其中image代表的是需要缩放的对象(new_w,new_h)表示的是缩放后的图片的大小为多少插值选项可选择。 在OpenCV缩放的插值选项以及各自的特点有 cv2.INTER_NEAREST最近邻插值速度最快但质量最差。cv2.INTER_LINEAR双线性插值速度较快质量较好。cv2.INTER_CUBIC双三次插值速度较慢质量最好。cv2.INTER_AREA区域插值适用于图像缩小。cv2.INTER_LANCZOS4Lanczos插值速度较慢质量最好。cv2.INTER_LINEAR_EXACT精确的双线性插值速度较慢质量最好。cv2.INTER_MAX最大的插值方法编号。cv2.WARP_FILL_OUTLIERS在变换过程中填充异常值。cv2.WARP_INVERSE_MAP使用逆映射进行变换。 下面举个例子
import cv2
import matplotlib.pyplot as plt
import numpy as npimgcv2.imread(rD:\Photo\1.jpeg)
img1cv2.resize(img,(400,300),cv2.INTER_NEAREST)
img2cv2.resize(img,(400,300),cv2.INTER_LINEAR)
img3cv2.resize(img,(400,300),cv2.INTER_CUBIC)
img4cv2.resize(img,(400,300),cv2.INTER_AREA)
img5cv2.resize(img,(400,300),cv2.INTER_LANCZOS4)
img6cv2.resize(img,(400,300),cv2.INTER_LINEAR_EXACT)
img7cv2.resize(img,(400,300),cv2.INTER_MAX)
img8cv2.resize(img,(400,300),cv2.WARP_FILL_OUTLIERS)
img9cv2.resize(img,(400,300),cv2.WARP_INVERSE_MAP)titles[Original Image,INTER_NEAREST,INTER_LINEAR,INTER_CUBIC,INTER_AREA,INTER_LANCZOS4,INTER_LINEAR_EXACT,INTER_MAX,WARP_FILL_OUTLIERS,WARP_INVERSE_MAP]
img[img,img1,img2,img3,img4,img5,img6,img7,img8,img9]
for i in range(9):plt.subplot(3,3,i1)plt.imshow(img[i])plt.title(titles[i])plt.xticks([]),plt.yticks([])
plt.show()
运行结果如下所示
、
可以看到当采用不同的插值选项的时候有时并不明显而有时会有细微差别。
图像的平移
图像的平移就是向任意一个方向移动一定的像素由于图像本质上是一个矩阵对图像的移动其实就是对矩阵的移动在OpenCV中使用np.float()函数对图像进行平移。
比如下面这个例子
import cv2
import matplotlib.pyplot as plt
import numpy as npimagecv2.imread(rD:\Photo\1.jpeg)
(h,w)image.shape[:2]
M np.float32([[1,0,50],[0,1,25]])
shifted_imagecv2.warpAffine(image,M,(w,h))
cv2.imshow(shifed_image,shifted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在上面的代码中np.float32([[1,0,50],[0,1,25]])表示向[1,0]方向移动50像素向[0,1]方向移动25像素运行结果如下所示 图像的旋转
图像的旋转即以某一点为圆心按顺/逆时针旋转多少角度。在OpenCV中使用cv2.getRotationMatrix2D()来对与图像进行选举案。我们知道图像的本质就是矩阵对于图像进行旋转的过程中本质就是对于矩阵进行旋转cv2.getRotationMatrix2D()一共有三个参数其中第一个是旋转所固定的点第二个是旋转的角度第三个是图片缩放的尺度。完成之后需要对于图片进行仿射变换使用warpAffine()来完成。例如
import cv2
imgcv2.imread(rD:\Photo\1.jpeg)
w,himg.shape[:2]
center(w//2,h//2)
rotation_matrixcv2.getRotationMatrix2D(center,90,1.0)
rotation_imagecv2.warpAffine(img,rotation_matrix,(w,h))
type(rotation_image)
cv2.imshow(rotation_image,rotation_image)
cv2.waitKey(0)
cv2.destroyAllWindows() 注 cv2.warpAffine()在OpenCV中是对于图像进行仿射变化需要输入两个参数分别是原始图像和变换矩阵。仿射变换用于图像的平移、旋转、缩放等。 运行结果如下所示 可以看到在运行出来的图像中图像比原图逆时针旋转了90°。
如果将旋转的角度定为45°时即代码为
rotation_matrixcv2.getRotationMatrix2D(center,45,1.0)
运行结果如下所示 可以看到在旋转之后的图片中因为展示图片的大小以及角度原因可以看到四个棱角的地方无法展示而多余的部分使用黑色来填充。
图像的裁剪
我们知道图像的本质就是一个矩阵现在我们想对图像进行裁剪即为截取矩阵的部分内容即为new_imageimage[x1:x2,y1:y2]其中x1、x2、y1、y2为指定的横坐标和纵坐标。
例如
import cv2
import matplotlib.pyplot as plt
import numpy as np#读取图片内容
def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()imgcv2.imread(rD:\Photo\1.jpeg)
img1img[0:300,200:400]
#截取原图像0-300行和200-400列
cv_show(image,img1)
运行效果如下所示 可以看到OpenCV截取指定部分的内容。
图像的翻转
图像的翻转可以分为水平方向的翻转和垂直方向的翻转OpenCV中使用cv2.flip()其中第一个参数是需要翻转的图片第二个参数是如何翻转若第二个参数为1则表示水平翻转若第二个参数为0表示水平翻转若第二个参数为-1则表示水平加垂直翻转。
例如
import cv2
import matplotlib.pyplot as plt
import numpy as mpimagecv2.imread(rD:\Photo\1.jpeg)
flipped_image1cv2.flip(img,1)
flipped_image2cv2.flip(img,0)
flipped_image3cv2.flip(img,-1)
images[image,flipped_image1,flipped_image2,flipped_image3]for i in range(4):plt.subplot(2,2,i1)plt.imshow(images[i])plt.xticks([]),plt.yticks([])
plt.show()
运行结果如下所示 可以看到上面四张图分别是原图、水平翻转、垂直翻转、水平垂直翻转水平垂直翻转。