OpenCV学习

打开图片

1
2
3
img = cv2.imread('hat.png')
cv2.imshow('image', img)
cv2.waitKey(0) #没有waitKey没办法显示

通道提取

图像通道,在RGB色彩模式下就是指那单独的红色、绿色、蓝色部分。也就是说,一幅完整的图像,是由红色绿色蓝色三个通道组成的。他们共同作用产生了完整的图像。
阿尔法通道(Alpha Channel)是指一张图片的透明和半透明度。例如:一个使用32位存储的图片,每8位表示红绿蓝,和阿尔法通道。在这种情况下,就不光可以表示透明还是不透明,阿尔法通道还可以表示256级的半透明度。

1
2
3
4
5
6
7
r,g,b,a = cv2.split(img) 
cv2.imshow("Blue",r)
cv2.imshow("Red",g)
cv2.imshow("Green",b)
cv2.imshow("Alpha",a)
cv2.waitKey(0)
#jpg等压缩格式没有Alpha通道

通道合并

1
merged = cv2.merge([b,g,r]) #前面分离出来的三个通道

灰度转换

1
2
3
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('image', gray)
cv2.waitKey(0)

人脸检测

1
2
3
4
5
6
7
8
9
10
11
12
face_patterns = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')//xml文件为opencv在GitHub上共享出来的具有普适的训练好的数据
sample_image = cv2.imread('muti.jpg')
faces = face_patterns.detectMultiScale(sample_image,
scaleFactor=1.1,
minNeighbors=8,
minSize=(50, 50))

print len(faces)
for(x,y,w,h) in faces:
cv2.circle(sample_image,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2)
cv2.imshow("Find Faces!",sample_image)
cv2.waitKey(0)