由于项目需要本人需要自己制作自己的数据集,所以写下。有些数据集可以从网上download下来,又或者从网页爬虫下来,但是自己动手制作自己的数据集又未尝不可,实用性更大。下面是一个简单的利用opencv调用摄像头来拍照收集图片的代码(每按键一次s键,拍照一次,当然你也可以搞个每隔几秒拍一次我就不想改代码了,嫌麻烦),主要特色是里面加了一个改变亮度和对比度的函数,可以增加数据的丰富度,增强在不同的光源下的识别效率(如果你做物体识别时):
import cv2
import os
import sys
import random
//当前目录下创建一个文件夹my_data
out_dir='./my_data'
if not os.path.exists(out_dir):
os.makedirs(out_dir)
#改变亮度和对比度
def relight(img,alpha=1,bias=0):
w, h = img.shape[:2]
for i in range(0,w):
for j in range(0,h):
for c in range(3):
tmp=int(img[i,j,c]*alpha+bias)
if tmp>255:
tmp=255
elif tmp<0:
tmp=0
img[i,j,c]=tmp
return img
cap = cv2.VideoCapture(1)
i = 1
while (1):
ret, img = cap.read()
k = cv2.waitKey(1)
# 按下esc退出
if k == 27:
break
elif k == ord('s'):
# 改变图像的亮度,增加图像的对比性,可以识别不同光源下的
img = relight(img, random.uniform(0.5, 1.5), random.randint(-50, 50))
cv2.imwrite(out_dir + '/image'+ str(i) + '.jpg', img) //image是你想要的图片名字喔,得到的是imagei.jpg
print('It`s the %s image.' % str(i))
i += 1
cv2.imshow("capture", img)
cap.release()
当然,增加改变亮度和对比度使得在每拍一张图片的时候有点卡顿感,但是影响不大。如果你觉得用不到也可以删去。
如果想在拍照的时候顺便改下图片的像素怎么办呢?这个简单:
你可以在
cap = cv2.VideoCapture(1)
后面加上
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
可不可行呢?本人没试过,应该是可以的。
更多推荐
python opencv 制作属于自己的数据集
发布评论