OpenCV之图像的生成、边界扩展、缩放变换、平移变换、仿射变换、透射变换——pthon实现
2018-12-29 22:04
831 查看
一、图像的生成———生成一个纯色图像
[code]import cv2 import numpy as np img = np.ones((650,1000), dtype = np.uint8) cv2.imshow('img',img) cv2.waitKey(0)
图像矩阵各像素点的值均为0,即黑色图像。
二、扩展图像边缘
使用的函数:cv2.copyMakeBorder(src,top,bottom,left,right,borderType,value)
top、bottom、left、right为四个方向,上下左右,取值为拓展的像素值大小
src:要拓展的图像
borderType:边界的类型
value:仅仅是常亮时,边界才有意义
[code]#在图像边缘扩充图像 import cv2 import numpy as np img = cv2.imread('Ghostblade.jpg') #cv2.copyMakeBorder(src,top,bottom,left,right,borderType,value),四个方向,上下左右 img1 = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_CONSTANT,value=[0,0,0]) cv2.imshow('imag1',img1) cv2.waitKey(0)
- value = [0,0,0]也可以直接写成0
原图:
拓展图:
三、缩放变换
[code]#OpenCV提供了一个可以手动调节图片大小的函数,cv2.resize() import cv2 import numpy as np img = cv2.imread('Ghostblade.jpg') #方法一: # res = cv2.resize(img, None, fx = 0.5, fy = 0.5, interpolation= cv2.INTER_CUBIC) #方法二: height, width = img.shape[:2] res = cv2.resize(img,(width//2, height//2), interpolation = cv2.INTER_AREA) cv2.imshow('img',res) cv2.waitKey(0)
尺寸变小,cv2.resize()函数中,图像的尺度信息不能是浮点数,必须是整数
四、平移变换
[code]import cv2 import numpy as np img = cv2.imread('Ghostblade.jpg',0) #读入时将图像转换为灰度图像 print(img.shape) # 图像的大小为763*1600 rows, cols = img.shape #因此img.shape只返回两个参数值 M = np.float32([[1,0,100], [0,1,50]]) #移动(100,50) dst = cv2.warpAffine(img,M,(cols,rows)) cv2.imshow('img',dst) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.warpAffine()函数:进行仿射变换
五、仿射变换
[code]import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('Ghostblade.jpg') rows, cols= img.shape[:2] #取变换前后的三对对应点,求解仿射变换矩阵 pst1 = np.float32([[50,50],[200,50],[50,200]]) pst2 = np.float32([[10,100],[200,50],[100,250]]) M = cv2.getAffineTransform(pst1, pst2) #仿射变换的仿射矩阵 dst = cv2.warpAffine(img, M, (cols, rows)) #求解仿射变换后的图像 #对像素点进行像素值的更换 color = (0,0,255) img[50,50] = color img[200,50] = color img[50,200] = color dst[10,100] = color dst[200,50] = color dst[100,250] = color cv2.imwrite('Input.jpg', img) #保存改变像素点后的图像 cv2.imwrite('Output.jpg',dst) #将图像由BGR空间改成RGB空间(OpenCV处理的是BGR空间,matplotlib处理的是RGB空间) img = img[:,:,::-1] dst = dst[:,:,::-1] plt.figure() plt.subplot(121), plt.imshow(img), plt.title('Input') plt.subplot(122), plt.imshow(dst), plt.title('Output') plt.show()
要使得仿射变换的图片完整显示,则可以先扩展图片,在进行仿射变换。
六、透射变换
[code]#透视变换,需要输入图像的四个点和输出图像上的对应点 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('Ghostblade.jpg') #扩展图像,保证内容不超出可视范围 img = cv2.copyMakeBorder(img,200,200,200,200,cv2.BORDER_CONSTANT,0) rows, cols = img.shape[:2] pst1 = np.float32([[56,65],[368,52],[28,387],[389,390]]) pst2 = np.float32([[0,0],[300,0],[0,300],[300,300]]) M = cv2.getPerspectiveTransform(pst1,pst2) dst = cv2.warpPerspective(img,M,(cols,rows)) #BGR到RGB的转换 img = img[:,:,::-1] dst = dst[:,:,::-1] plt.subplot(121), plt.imshow(img), plt.title('Input') plt.subplot(122), plt.imshow(dst),plt.title('Output') plt.show()
相关文章推荐
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- OpenCV下三对点计算仿射变换实现图像的水平镜像(翻转)的详细说明和源程序
- Opencv Sift和Surf特征实现图像无缝拼接生成全景图像
- Opencv Sift和Surf特征实现图像无缝拼接生成全景图像
- opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移
- opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移
- 用OpenCV实现图像的水平镜像(翻转)变换和竖直镜像(翻转)变换(垂直镜像变换)的源码
- 图像基本变换--- 平移、旋转、缩放、仿射变换、镜像
- Android Jni 利用OpenCV 实现图像尺寸缩放(三)
- CUDA和OpenCV实现的图像GAMMA变换
- 图像识别中距离变换的原理及作用详解,并附用OpenCV中的distanceTransform实现距离变换的代码!
- 基于CUDA和OpenCV实现的图像GAMMA变换
- 图像的等距变换,相似变换,仿射变换,射影变换及其matlab实现