opencv的基本操作
cv2是opencv在python中的缩写,函数开头用cv2
cv2.imread('cat.jpg') #读入图片cat.jpg
cv2.imwrite('mycat.png',img) #图片img保存为mycat.png
cv2.imshow('image',img) #创建窗口,显示图像
cv2.waitKey(10000) #等待时间,以 毫秒为单位,“0”表示任意键中止
cv2.destroyAllWindows()
img.shape #查看img的尺寸
- cv2.IMREAD_COLOR:彩色图像
- cv2.IMREAD_GRAYSCALE:灰度图像
img=cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE) #读入cat.jpg灰色图像,存到img
img.size #图片img的尺寸
读取视频 cv2.VideoCapture('test.mp4')
vc = cv2.VideoCapture('test.mp4') #读取视频test.mp4到vc
cat = img[0:200,0:200] #截取图片img,0:200,0:200
b,g,r = cv2.split(img) #img图片提取为b,g,r三个颜色通道
img = cv2.merge((b,g,r)) #(b,g,r)三个颜色通道合成图片image
#只保留r通道,cur_img[:,:,0]的格式
cur_img = img.copy() #复制img到cur_img
cur_img[:,:,0] = 0 #图片cur_img的b通道为0
cur_img[:,:,1] = 0 #图片cur_img的g通道为0
cv_show('img',cur_img) #显示只保留r通道的图片cur_img
下面图形包含六幅猫,如何将六幅图合并到一起展示呢?
使用subplot()绘制图形
subplot(numRows, numCols, numPlots)
图形划分成numRows行,numCols列;上图为2行3列,numRows=2,numCols=3;
左上角编号从1开始,从左到右,从上到下依次编号
numPlots是你要绘制子图的编号;
subplot(2, 3, 3)
图片坐标为 (1,1),(1,2),(1,3)
(2,1),(2,2),(2,3)
要绘制2行3列的图形,要绘制的图形编号为3,坐标为(1,3),是图REFLECT。
【注意】如果numRows, numCols, numPlots这三个数字都小于10,可以缩写为一个整体。
【例子】subplot(231)和subplot(2,3,1)相同
图像运算
两个图形shape值相同才能运算,使用resize()调整图像shape相同。
img_cat2 = img_cat + 10 #在img_cat图像上+10,表示所有像素点亮度值加10
img_cat2[:5, :, 0] #显示img_cat2,“:5”指前5行,中间的“:”是所有列,“0”是第一个通道
(img_cat + img_cat2)[:5, :, 0] #相当于%256
cv2.add(img_cat, img_cat2)[:5, :, 0] #img_cat+img_cat2,像素点数值超过255,取255
图像变换
img_dog = cv2.resize(img_dog, (500, 414)) # img_dog图像尺寸转换为(414,500)
res = cv2.addWeighted(img_cat, 0.4, img_dog, 0.5, 0) #img_cat和 img_dog加权相加
res = cv2.resize(img_cat, (0,0), fx = 3, fy = 4) #图像伸缩变换,x变为3倍,y变为4倍
res = cv2.resize(img_cat, (0,0), fx = 1, fy =3) #x是1倍,y是3倍
【注意】
notebook中shift+Enter执行代码
输入法英文输入状态,写代码,字符单引号'',字符串双引号"",括号()
输入法汉字输入状态,写注释,字符串的内容"XXXX"