之前一直是使用OpenCV的C++接口来编程,由于python功能强大,现在也有很多人使用OpenCV-Python来完成图像处理的一些工作,因为其比较方便。
这两天由于要为object detection by learning 做一些准备工作,其实也就是把视频样本转换为图片,然后给每一个图片打标签。关于第2步可以直接使用github上的开源代码labelImg 来完成。第1步自己用OpenCV-Python随便写了几行代码,贴在这里,我也是第一次使用python编写opencv,如果用C++编过的话这个基本不需要系统学习,直接查OpenCV-Python Tutorials 文档即可。
我这是使用环境是opencv3.1+python2.7, ubuntu14.04平台。
代码片段1:显示一张图片并将其缩放到指定尺寸
import cv2
img = cv2.imread('good.jpg') #你好
cv2.namedWindow('Image')
cv2.imshow('Image', img)
res=cv2.resize(img, (400, 296), interpolation=cv2.INTER_CUBIC)
cv2.imshow('Scale', res)
cv2.waitKey(0)
代码片段2:将视频序列转换为图片序列
#!/usr/bin/env python
#coding:utf-8
import cv2
cap = cv2.VideoCapture('tip3.avi')
i=0
while(cap.isOpened()):
ret, frame=cap.read()
frame_scale=cv2.resize(frame, (400, 296), interpolation=cv2.INTER_CUBIC)
cv2.imshow('frame', frame_scale)
i+=1
cv2.imwrite('fullImg/'+str(i)+'.jpg',frame_scale)
if cv2.waitKey(1)&0xFF==ord('q'):
break
cap.release()
cv2.destroyAllWindows()
代码片段3:提取出图片序列的一部分作为训练或测试样本
#!/usr/bin/env python
#coding:utf-8
import cv2
import os
os.mkdir('dount')
i=1
while(i<505):
frame=cv2.imread('dountImg/'+str(i)+'.jpg')
if i%3==0: #每3张中取1张当样本
s='%05d' % i
cv2.imwrite('dount/'+s+'.jpg', frame)
i+=1