python openCV 学习笔记1

1.Numpy的使用

import numpy as np

#定义zeros矩阵
black = np.zeros((480,640,3),dtype=np.uint8) #480为高,640为列
print(black)

#定义full矩阵
#480:行的个数,640:列的个数,255:每个元素的值
full = np.full((480,640,3),255,dtype=np.uint8)

#定义单位矩阵,4x4
diag = np.identity(4)

#定义单位矩阵
#5:列的数量,3:行的数量,2:从第一行第3列开始为单位矩阵
martix = np.eye(5,3,key=2)


#去矩阵中的某一小块
roi = img[20:50,40:60]

#取矩阵中的全部
img[:,:] = [0,255,255]
img[:] = [0,255,255]

2.关于画多边形的

pts = np.array(([10,50],[60,40],[450,100]),np.int32) #注意是np,int32
cv2.polylines(black,[pts],True,(0,0,255)) #True是闭合多边形,False是非闭合多边形
cv2.fillPoly(black,[pts],(0,255,255)) #填充刚刚绘制的闭合多边形

3.图像相加减法

import cv2
import numpy as np

#图片的加法运算就是矩阵的加法运算
#因此,两张图片的分辨率要相等

dog = cv2.imread('dog.jpg')
print(dog.shape)
img = np.ones((717, 1275,3),np.uint8) * 10


#加法
result = cv2.add(dog,img)

#减法
result2 = cv2.subtract(dog, img)  #dog - img


#乘法
result3 = cv2.multiply(dog,img)

#除法
result4 = cv2.divide(dog,img)

cv2.imshow('add',result)
cv2.waitKey(0)

4.图像融合

import cv2
import numpy as np

dog = cv2.imread('dog.jpg')

cartoon  = cv2.imread('cartoon_1.jpg')

#图像融合,最后一个数表示提亮多少个像素
result = cv2.addWeighted(dog,0.7,cartoon,0.3,50)

cv2.imshow('add',result)
cv2.waitKey(0)

5.图像的非操作,可以理解为像素取反

img = np.zeros((200,200,3),np.uint8)
img[50:100,50:100] = (0,0,255)
cv2.imshow('img',img)

运行后的图为 

new_img = cv2.bitwise_not(img)

cv2.imshow('new_img',new_img)

运行后的图为

 可以看到,黑色变成白色,而红色变成了绿色

6.图像的亦或

new_img = cv2.bitwise_xor(img1,img2)

其中img1为

 img2为

 new_img为

 可以看到,图片的亦或就是取

5.图像的缩放

cv2.resize(src,dst,dsize,fx,fy,interpolation) 

interpolation 为缩放算法

INTER_NEAREST 临近插值

INTER_LINEAR 双线性插值 默认

INTER_CUBIC 三次插值

INTER_AREA 效果最好

#使用desize
new_dog = cv2.resize(dog,(1000,1000))

#使用fx,fy
new_dog2 = cv2.resize(dog,None,fx=1.2,fy=1.2)

6.图像的翻转

cv2.flip(img,filpCode)

filpCode == 0 上下翻转

filpCode > 0 左右翻转

filpCode 《 0 上下,左右翻转

7.图像的旋转

cv2.rotate(img,rotateCode)

ROTATE_90_CLOCKWISE  顺时针90

ROTATE_180  顺时针180

ROTATE_90_COUNTERCLOCKWISE 顺时针270

8.仿射变化

 图像的画布大小不变,而图像在画布上进行平移,旋转,和缩放变化。

warpAffine(src,M,dsize,flags,mode,value)

dsize:输出尺寸大小

flags:与resize的插值算法一致(默认值)

mode: 边界外推法 (默认值)

value:填充边界的值 (默认值)

import cv2
import numpy as np

dog = cv2.imread('dog.jpg')
h,w,ch = dog.shape

#平移变化,100向右,200向下
M1 = np.float32([[1,0,100],[0,1,200]])  #M为32位高精度
new1 = cv2.warpAffine(dog,M1,(w,h))

#旋转变化,逆时针旋转
M2 = cv2.getRotationMatrix2D((w/2,h/2),1,1)

#画布大小为之前的一半
new2 = cv2.warpAffine(dog,M2,(int(w/2),int(h/2)))


cv2.imshow('new',new1)
cv2.imshow('new2',new2)
cv2.waitKey(0)

9.透视变化

warpPerspective(img,M,dsize)

getPersectiveTransform(src,dst)

代码和输出图像如下:

import cv2
import numpy as np

img = cv2.imread('book.jpg')
cv2.namedWindow('new',cv2.WINDOW_NORMAL)

#原图的四个边角坐标
src = np.float32([[269,819],[459,108],[1590,360],[1314,1237]])

#新图的四个坐标点
dst = np.float32([[0,0],[750,0],[750,1177],[0,1177]])

M = cv2.getPerspectiveTransform(src,dst)

new = cv2.warpPerspective(img,M,(750,1177))

cv2.imshow('orgin',img)
cv2.imwrite('orgin.jpg',img)

cv2.imshow('new',new)
cv2.imwrite('new.jpg',new)
cv2.waitKey(0)
原图
img

 

 

 

 

 

new

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值