Opencv+Python图像处理

本文介绍了如何在Python环境中使用OpenCV进行图像处理,包括图片的打开、关闭、保存,图像绘制,以及人脸识别。通过示例代码展示了如何使用OpenCV的line、rectangle、circle函数进行图像绘制,并演示了使用haarcascade文件进行面部和眼睛检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境搭建: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() 



3. Detect face

# -*- 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() 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值