OpenCV基础(一)+https://developer.aliyun.com/article/1544252?spm=a2c6h.13148508.setting.22.1fa24f0eHs4uWw
绘制几何图形
绘制直线
cv.line(img,start,end,color,thickness)
- img:要绘制直线的图像
- Start,end: 直线的起点和终点
- color: 线条的颜色
- Thickness: 线条宽度
绘制圆形
cv.circle(img,centerpoint, r, color, thickness)
- img:要绘制圆形的图像
- Centerpoint, r: 圆心和半径
- color: 线条的颜色
- Thickness: 线条宽度,为-1时生成闭合图案并填充颜色
绘制矩形
cv.rectangle(img,leftupper,rightdown,color,thickness)
- img:要绘制的矩形图像
- Leftupper, rightdown: 矩形的左上角和右下角坐标
- color: 线条的颜色
- Thickness: 线条宽度
向图像中添加文字
cv.putText(img,text,station, font, fontsize,color,thickness,cv.LINE_AA)
实战:
import numpy as np import cv2 as cv import matplotlib.pyplot as plt img = np.zeros((512,512,3), np.uint8) cv.line(img,(0,0),(511,511),(255,0,0),5) cv.rectangle(img,(384,0),(510,128),(0,255,0),3) cv.circle(img,(447,63), 63, (0,0,255), -1) font = cv.FONT_HERSHEY_SIMPLEX cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA) plt.imshow(img[:,:,::-1]) plt.title('匹配'), plt.xticks([]), plt.yticks([]) plt.show()
几何变换
图像缩放
cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)
- src : 输入图像
- dsize: 绝对尺寸,直接指定调整后图像的大小
- fx,fy: 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可
- interpolation:插值方法
import cv2 as cv img1 = cv.imread("dog.jpeg") rows,cols = img1.shape[:2] res = cv.resize(img1,(2*cols,2*rows),interpolation=cv.INTER_CUBIC) res1 = cv.resize(img1,None,fx=0.5,fy=0.5) cv.imshow("orignal",img1) cv.imshow("enlarge",res) cv.imshow("shrink)",res1) cv.waitKey(0) fig,axes=plt.subplots(nrows=1,ncols=3,figsize=(10,8),dpi=100) axes[0].imshow(res[:,:,::-1]) axes[0].set_title("尺度)") axes[1].imshow(img1[:,:,::-1]) axes[1].set_title("原图") axes[2].imshow(res1[:,:,::-1]) axes[2].set_title("尺度") plt.show()
图像平移
cv.warpAffine(img,M,dsize)
- img: 输入图像
- M: 2∗∗3移动矩阵
图像旋转
cv2.getRotationMatrix2D(center, angle, scale)
- center:旋转中心
- angle:旋转角度
- scale:缩放比例
import numpy as np import cv2 as cv import matplotlib.pyplot as plt img = cv.imread("image.jpg") rows,cols = img.shape[:2] M = cv.getRotationMatrix2D((cols/2,rows/2),90,1) dst = cv.warpAffine(img,M,(cols,rows)) fig,axes=plt.subplots(nrows=1,ncols=2,dpi=100) axes[0].imshow(img1[:,:,::-1]) axes[0].set_title("原图") axes[1].imshow(dst[:,:,::-1]) axes[1].set_title("旋转后") plt.show()
仿射变换
仿射变换是线性变换与平移的组合,可以保持直线和平行线的性质。它将矩形映射为平行四边形,即变换后各边仍然平行。
图像的仿射变换涉及到图像的形状位置角度的变化,是深度学习预处理中常到的功能,仿射变换主要是对图像的缩放,旋转,翻转和平移等操作的组合。
import numpy as np import cv2 as cv import matplotlib.pyplot as plt img = cv.imread("image.jpg") rows,cols = img.shape[:2] pts1 = np.float32([[50,50],[200,50],[50,200]]) pts2 = np.float32([[100,100],[200,50],[100,250]]) M = cv.getAffineTransform(pts1,pts2) dst = cv.warpAffine(img,M,(cols,rows)) fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100) axes[0].imshow(img[:,:,::-1]) axes[0].set_title("原图") axes[1].imshow(dst[:,:,::-1]) axes[1].set_title("仿射后") plt.show()
透射变换
import numpy as np import cv2 as cv import matplotlib.pyplot as plt img = cv.imread("image.jpg") rows,cols = img.shape[:2] pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]]) pts2 = np.float32([[100,145],[300,100],[80,290],[310,300]]) T = cv.getPerspectiveTransform(pts1,pts2) dst = cv.warpPerspective(img,T,(cols,rows)) fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100) axes[0].imshow(img[:,:,::-1]) axes[0].set_title("原图") axes[1].imshow(dst[:,:,::-1]) axes[1].set_title("透射") plt.show()
类似的还有OpenCV处理平滑方法、边缘检测、视频读写等操作和API,后期会更新更多OpenCV相关操作~