环境搭建:http://blog.youkuaiyun.com/avazhangjing/article/details/79001088
本文代码参考:
http://blog.youkuaiyun.com/eclipse_c/article/details/73826563
http://blog.youkuaiyun.com/sunny2038/article/details/9057415
以在上述环境下验证通过。
下面介绍OpenCV的三种常用功能:打开关闭另存图片、画图、人脸识别
1. Open,Close,Save pic
#注意,Python严格要求缩进对齐
#OpenCloseSave pic
import cv2
img = cv2.imread("D:\pic\heat.jpg", cv2.IMREAD_COLOR )
#在Python中不需要声明变量,所以也就不需要C++中的cv::Mat xxxxx了。路径用/和\都可以.相对路径./也可以。OpenCV目前支持读取bmp、jpg、png、tiff等常用格式。更详细的请参考OpenCV的参考文档。
cv2.namedWindow("Image",0) #和创建一个窗口,0全屏显示
cv2.imshow("Image", img)
print ("save press s, exit press esc")
key = cv2.waitKey (0) #接受键盘输入
if key == 27:
cv2.destroyAllWindows()
elif key == ord('s'):
cv2.imwrite("wirte.png", img)
#图片另存为。
#第一个参数是保存的路径及文件名,第二个是图像矩阵。其中,imwrite()有个可选的第三个参数,例如:
#第三个参数针对特定的格式:
#对于JPEG,其表示的是图像的质量,用0-100的整数表示,默认为95。 注意,cv2.IMWRITE_JPEG_QUALITY类型为Long,必须转换成int。
#cv2.imwrite("D:\\cat2.jpg", img,[int(cv2.IMWRITE_JPEG_QUALITY), 5])
#对于PNG,第三个参数表示的是压缩级别。cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3.
# cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
# cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
cv2.destroyAllWindows() #释放窗口
2. Draw pic
# -*- coding: utf-8 -*-
"""
Created on Mon Jan 8 12:30:54 2018
@author: ava
"""
# drawing
import numpy
import cv2
# Create a black image
img = numpy.zeros((512,512,3), numpy.uint8)
#新的OpenCV的接口中没有CreateImage接口。即没有cv2.CreateImage这样的函数。如果要创建图像,需要使用numpy的函数(现在使用OpenCV-Python绑定,numpy是必装的)。
# Draw a diagonal blue line with thickness of 5 px
cv2.line(img,(0,0),(511,511),(255,0,0),5)
# draw a rectangle
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
# draw a circle
cv2.circle(img,(447,63), 63, (0,0,255), -1)
# add text
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'Meng', (10,500), font, 4, (255,255,255), 2)
# cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA) # cv2.LINE_AA not found
# write file to disk
# cv2.namedWindow("Image")
cv2.imshow("Image", img)
key = cv2.waitKey (0)
cv2.destroyAllWindows()
# -*- coding: utf-8 -*-
"""
Created on Mon Jan 8 12:35:32 2018
@author: ava
"""
# face detection
import numpy
import cv2
face_cascade = cv2.CascadeClassifier('D:/pic/haarcascade_frontalface_default.xml') #under /opencv/sources/data/haarcascade folder
eye_cascade = cv2.CascadeClassifier('D:/pic/haarcascade_eye.xml')
img = cv2.imread('D:/pic/heat.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
#第二个参数1.3:scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%; 第三个参数5:?
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
#255,0,0是蓝色,蓝绿红;2是划线粗细。
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray) #眼睛在脸的范围里找
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
print ("Found {0} faces!".format(len(faces)))
#打印找到几个人脸
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()