OpenCV图形运算与变换
图像相加
#图的属性要一样
res = cv2.add(dog, img)
#减法要注意顺序,dog - img
res = cv2.subtract(dog, img)
res = multiply(dog, img)
divide(dog, img)
图像融合
#图片属性要一样
#alpha和beta是图片权重
#gamma 静态权重增加,一般设为0
newImg = addWeighted(A, alpha, B, bate, gamma)
图像位运算
img = np.zeros((200,200), np.uint8)
img[50:150, 50:150] = 255
非
newImg = cv2.bitwise_not(img)
与
andImg = cv2.bitwise_and(img, img2)
或
orImg = cv2.bitwise_or(img, img2)
xor
xorImg = cv2.bitwise_xor(img, img2)
>图像缩放 旋转
#缩放算法
#fx,fy缩放因素 interpolation图像插值算法
INTER_NEAREST速度快 效果差
INTER_LINEAR
INTER_CUBIC
INTER_AREA速度慢 效果好
#resize(src,dsize,fx,fy,interpolation)
cv2.resize(dog, (640,400))
cv2.resize(dog, None,fx = 0.3, fy = 0.3)
#图像翻转
cv2.flip(img, flipCode)
flipCode == 0 上下
flipCode > 0 左右
flipCode < 0 上下+左右
#图像旋转
cv2.rotate(img, rotateCode)
#90
ROTATE_90_CLOCKWISE
#180
ROTATE_180
#270
ROTATE_90_COUNTERCLOCKWISE
图像的仿射变换
图像变换的总称
#了解
warpAffine(src, M, dsize, flags, mode, value)
M:变换矩阵
dsize输出尺寸大小
mode:边界外推法标志
value:填充边界的值
#x上的平移(数组第三个)正值向下和右 负值向左上
M = np.float32([[1,0,100],[0,1,0]])
dog = cv2.imread('/D/dog.jpeg')
h,w,ch = dog.shape
new = cv2.warpAffine(dog,M,(w,h))
#实用
getRotationMatrix2D(center, angle, scale)
center 中心点
angle角度
scale缩放比例
h,w,ch = dog.shape
#shape图像大小不变
cv2.getRotaionMatrix2D((w/2,h/2),15,0.3)
new = cv2.warpAffine(dog, M,(w,h))
#三点确定变换位置
src = np.float32([[400,300],[800,300],[400,1000]])
M = cv2.getAffineTransform(src[],dst[])
new = cv2.warpAffine(dog, M,(w,h))
透视变换
#获取变换矩阵
src = np.float32([[100,1100],[2100,1100],[0,4000],[2500,3900]])
M = getPerspectiveTransform(src,dst)
warpPerspective(img,M,dsize,...)


浙公网安备 33010602011771号