通过上一节已经学会了使用OpenCV读取、显示、写入图像等基本操作,有了初步基础就可以学习更多的图像处理方法。
缩放、裁剪、补边
import cv2
img=cv2.imread('dog.jpg')
# 缩小为200x200的正方形
img_200x200=cv2.resize(img,(200,200))
# 不直接指定缩放后的大小,通过fx和fy指定缩放比例,0.5表示长宽各一半
# 插值方法默认为cv2.INTER_LINEAR,这里指定为最近邻插值
img_half=cv2.resize(img,(0,0),fx=0.5,fy=0.5,interpolation=cv2.INTER_NEAREST)
# 上下各贴50像素的黑边
img_add=cv2.copyMakeBorder(img,50,50,0,0,cv2.BORDER_CONSTANT,value=(0,0,0))
# 裁剪
patch_img=img[20:150,-180:-50]
cv2.imshow("image",img_200x200)
cv2.imshow("img_half",img_half)
cv2.imshow("img_add",img_add)
cv2.imshow("patch_img",patch_img)
cv2.waitKey(0)
ROI截取
#ROI,Range of instrest
roi = img[100:200,300:400] #截取100行到200行,列为300到400列的整块区域
img[50:150,200:300] = roi #将截取的roi移动到该区域 (50到100行,200到300列)
b = img[:,:,0] #截取整个蓝色通道
b,g,r = cv2.split(img) #截取三个通道,比较耗时
img = cv2.merge((b,g,r))