Python常用的机器视觉库有:
- OpenCV
- scikit-image
- SimpleCV
- Pygame
- ImageAI
- Pillow(PIL)
其中,OpenCV是最广泛使用的库, 可以进行各种计算机视觉和图像处理任务,如图像识别、跟踪、分割和特征提取等。Scikit-image是一个用于图像处理的开源Python库, 其重点在于对数学模型的实现上,用于图像分析、图像的处理及特征提取。SimpleCV是一个面向开发人员的计算机视觉框架, 开发者可以使用它快速、轻松地编写计算机视觉应用程序。Pillow, 它是Python Imaging Library的预启动库, 是一种可以创建、操作和处理图像的库。ImageAI是一款易于使用的Python库,用于实现各种计算机视觉任务,如对象检测、图像分割和图像分析等。
使用OpenCV库的Python代码,用于在图像中检测人脸:
import cv2
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 加载模型
img = cv2.imread('img.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 在图像中检测人脸
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 在图像中画出人脸框
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
以上代码将在图像中检测人脸,并在检测出的每个人脸上绘制一个绿色的矩形框。
使用scikit-image库的Python代码示例,用于在图像中进行Sobel边缘检测:
from skimage import io, filters
img = io.imread('img.jpg', as_gray=True)
# 以灰度图像的方式读取图像
edges = filters.sobel(img)
# 使用Sobel算子进行边缘检测
io.imshow(edges)
io.show()
# 显示边缘检测后的图像
以上代码将使用Sobel算子对读取的图像进行边缘检测,并显示处理后的图像。
使用SimpleCV库的Python代码示例,用于检测图像中的车辆:
from SimpleCV import *
cam = Camera()
# 初始化相机
while True:
img = cam.getImage()
# 获取一帧图像
img = img.scale(0.5)
# 缩小图像,以加快车辆检测速度
cars = img.findHaarFeatures('cars.xml')
# 使用Haar分类器检测车辆
if cars:
for car in cars:
car.draw()
print "Car detected at:" + str(car.coordinates())
img.show()
# 显示检测结果与原始图像
if cv2.waitKey(1) == 27:
# 对‘ESC’健进行判断,若按下则退出循环
break
cv2.destroyAllWindows()
以上代码将使用SimpleCV库中提供的Haar分类器检测图像中的车辆,并在检测到的车辆上绘制一个矩形框,并同时显示检测结果和原始图像。
使用ImageAI库的Python代码示例,用于在图像中进行物体检测:
from imageai.Detection import ObjectDetection
import os
execution_path = os.getcwd()
detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "image_new.jpg"))
for eachObject in detections:
print(eachObject["name"] , " : " , eachObject["percentage_probability"])
以上代码将使用ImageAI库中提供的RetinaNet预训练模型对图像中的对象进行检测,并在控制台上显示每个检测到的相对概率。检测结果将保存在名为"imaage_new.jpg"的图像文件中。