Python-OpenCV学习

  • 读取图片 灰度化 保存图片
import cv2 as cv
img=cv.imread('lena.png')#不能有中文
gray_img=cv.cvtColor(img,code=cv.COLOR_BGR2GRAY)#转为灰度图
cv.imshow('input image',img)#input image是创建的窗口
cv.imshow('gray image',gray_img)#input image是创建的窗口
cv.waitKey(0)#无限等待 随便按下一个键 就可以退出
cv.destroyAllWindows()#使用完内存后释放
cv.imwrite('gray_image.png',gray_img)

  •  修改图像尺寸
import cv2 as cv
img=cv.imread('lena.png')#不能有中文
#gray_img=cv.cvtColor(img,code=cv.COLOR_BGR2GRAY)#转为灰度图像
#修改图像的尺寸
resize_img=cv.resize(img,dsize=(200,200))
#resize_img=cv.resize(img,0.5)
cv.imshow('input image',img)#input image是创建的窗口
print(img.shape)
cv.imshow('resize image',resize_img)#input image是创建的窗口
print(resize_img.shape)
#只有输入q的时候,退出
while True:
    if ord('q')==cv.waitKey(0):  #ord返回的是二进制
        break
#cv.waitKey(0)#无限等待 随便按下一个键 就可以退出
cv.destroyAllWindows()#使用完内存后释放
#cv.imwrite('gray_image.png',gray_img)

  • 在图像上绘制矩形和圆
import cv2 as cv
img=cv.imread('lena.png')#不能有中文
#cv.imshow('input image',img)#input image是创建的窗口
#画矩形
x,y,w,h=180,180,50,50
cv.rectangle(img,(x,y,x+w,y+h),color=(0,255,0),thickness=2)
#画圆
#center原点的坐标 radius为半径
cv.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,0,255),thickness=2)
#python中整除是//
cv.imshow('output image',img)
cv.waitKey(0)#无限等待 随便按下一个键 就可以退出
cv.destroyAllWindows()#使用完内存后释放

  • 人脸检测
  • 在D:\python\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml
  • 有不同的检测器
import cv2 as cv
def fac_detect_demo():
    gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    #加载特征数据
    fac_detector=cv.CascadeClassifier('D:\python\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
    #返回脸部信息
    face=fac_detector.detectMultiScale(gray)
    #在脸部信息上面画矩形 标注出来
    for x,y,w,h in face:
        cv.rectangle(img,(x,y),(x+w,y+h),color=(255,255,0),thickness=2)
    cv.imshow('result',img)

img=cv.imread('lena.png')#不能有中文
#cv.imshow('input image',img)#input image是创建的窗口
#调用方法
fac_detect_demo()

cv.waitKey(0)#无限等待 随便按下一个键 就可以退出
cv.destroyAllWindows()#使用完内存后释放

  • 检测多张人脸 并画矩形和圆
import cv2 as cv
def fac_detect_demo():
    gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    #加载特征数据
    fac_detector=cv.CascadeClassifier('D:\python\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
    #返回脸部信息
    face=fac_detector.detectMultiScale(gray)
    #在脸部信息上面画矩形 标注出来
    for x,y,w,h in face:
        cv.rectangle(img,(x,y),(x+w,y+h),color=(255,255,0),thickness=2)
        cv.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(124,156,55),thickness=2)
    cv.imshow('result',img)

img=cv.imread('face.jpeg')#不能有中文
#cv.imshow('input image',img)#input image是创建的窗口
#调用方法
fac_detect_demo()

cv.waitKey(0)#无限等待 随便按下一个键 就可以退出
cv.destroyAllWindows()#使用完内存后释放

  • scaleFactor=1.1,minNeighbors=3,minSize=(60,60) 参数调整
import cv2 as cv
def fac_detect_demo():
    gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    #加载特征数据
    fac_detector=cv.CascadeClassifier('D:\python\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
    #返回脸部信息
    face=fac_detector.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=3,minSize=(60,60))
    #scaleFactor为检测的范围缩放比例
    #minNeighbors检测的最小次数
    #最小的检测尺寸为(60,60)
    #maxSize为最大的检测尺寸
    #在脸部信息上面画矩形 标注出来
    for x,y,w,h in face:
        cv.rectangle(img,(x,y),(x+w,y+h),color=(255,255,0),thickness=2)
        cv.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(124,156,55),thickness=2)
    cv.imshow('result',img)

img=cv.imread('face.jpeg')#不能有中文
#cv.imshow('input image',img)#input image是创建的窗口
#调用方法
fac_detect_demo()

cv.waitKey(0)#无限等待 随便按下一个键 就可以退出
cv.destroyAllWindows()#使用完内存后释放

 

posted @ 2021-03-11 17:49  司砚章  阅读(88)  评论(0编辑  收藏  举报