【OpenCV概念】 11— 对象检测

【OpenCV概念】 11— 对象检测_第1张图片

一、说明

        这都是关于物体识别的。物体识别是指通过计算机视觉技术,自动识别图像或视频中的物体及其属性和特征,是人工智能领域的一个分支。物体识别可应用于多个领域,包括工业自动化、智能家居、医疗、安防等。请随时阅读这篇文章:类似哈尔的功能(维基百科))

二、项目介绍 

        我们在这里所做的只是检测俄罗斯车牌和图像,然后使用haarcascade方法模糊它们。

2.1 步骤1: 导入库

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

2.2 步骤:导入要使用的图像

img = cv2.imread('DATA/car_plate_0.jpg')

【OpenCV概念】 11— 对象检测_第2张图片

2.3 步骤3:显示图像

        接下来,我们希望您创建一个函数,以更大的比例显示图像并进行颜色校正。

def display(img):
  fig = plt.figure(figsize=(10,8))
  ax = fig.add_subplot(111)
  new_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  ax.imshow(new_img)

        测试一下:

display(img)

2.4 步骤4: 加载级联俄罗斯车牌号 XML 文件。

        对于此步骤,您必须下载并粘贴到/DATA文件夹中的目录haarcascades。地址如下:opencv/data/haarcascades at master · opencv/opencv · GitHub

plate_cascade = cv2.CascadeClassifier('DATA/haarcascades/haarcascade_russian_plate_number.xml')

2.5 步骤5: 检测板的功能

        接下来,我们要创建一个函数来接收图像并围绕它所获取的内容绘制一个矩形。

def detect_plate(img):
  plate_img = img.copy()
  plate_rects = plate_cascade.detectMultiScale(plate_img,  
    scaleFactor=1.3, minNeighbors=3)
  
  for(x,y,w,h) in plate_rects:
    cv2.rectangle(plate_img, (x,y), (x+w, y+h), (0,0,255),3)
  return plate_img

        测试一下:

result = detect_plate(img)

        显示它:

display(result)

【OpenCV概念】 11— 对象检测_第3张图片

        04步骤 # 检测板的功能

        所以现在我知道车牌在哪里,我可以把它模糊出来。

        所以我要做的方法是,我实际上要删除这个区域并将其设置为感兴趣的区域(RoI)。

        然后我将模糊该区域,然后将其粘贴回原始图像中。

def detect_n_blur_plate(img):
  plate_img = img.copy()
  roi = img.copy()
  plate_rects = plate_cascade.detectMultiScale(plate_img,      
    scaleFactor=1.3, minNeighbors=3)
  for(x,y,w,h) in plate_rects:
    roi = roi[y:y+h, x:x+w]
    blured_roi = cv2.medianBlur(roi, 7)
    plate_img[y:y+h, x:x+w] = blured_roi
  return plate_img

        测试一下:

result = detect_n_blur_plate(img)

        显示它:

display(result)

【OpenCV概念】 11— 对象检测_第4张图片

这些是该项目的文件,在每个图像上运行该方法,请查看这篇有关如何操作文件的文章。 :)

from pathlib import Path
path = Path('DATA/')
files = path.iterdir()
for file in files:
  file_name = file.name
  if file_name[:9]=='car_plate' and file_name[-3:] == 'jpg':
    print(file_name)
    car_plate_0.jpg
    car_plate_1.jpg
    car_plate_2.jpg
    car_plate_3.jpg
    car_plate_4.jpg
    car_plate_5.jpg
    car_plate_6.jpg

这就是大家!

print("That's it! Thank you once again!\nI hope will be helpful.")
That's it! Thank you once again!
I hope will be helpful.

以下是我们测试的图像:

Note: 
The last image the algorithm was not able to detect.
The reasons may be several: The image may be at an angle difficult to detect, the numbering may not be Russian, the taillights do not give adequate space, who knows...
Try it yourself by manipulating the function parameters.
That is all!
Goodbye

【OpenCV概念】 11— 对象检测_第5张图片

【OpenCV概念】 11— 对象检测_第6张图片

【OpenCV概念】 11— 对象检测_第7张图片

【OpenCV概念】 11— 对象检测_第8张图片

【OpenCV概念】 11— 对象检测_第9张图片

【OpenCV概念】 11— 对象检测_第10张图片

【OpenCV概念】 11— 对象检测_第11张图片

【OpenCV概念】 11— 对象检测_第12张图片

【OpenCV概念】 11— 对象检测_第13张图片

【OpenCV概念】 11— 对象检测_第14张图片

【OpenCV概念】 11— 对象检测_第15张图片

Jose Portilla — Python for Computer Vision with OpenCV and Deep Learning — Learn the latest techniques in computer vision with Python, OpenCV, and Deep Learning!

Haar-like feature - Wikipedia

Haar-like features are digital image features used in object recognition. They owe their name to their intuitive…

相关资料:

00 集# 嗨,Python 计算机视觉 — PIL! — Python Imaging Library 简介 #PyVisionSeries

01 Episode# Jupyter-lab — Python — OpenCV — 图像处理练习 #PyVisionSeries

02 集# OpenCV — 图像基础知识 — 从头开始创建图像 #PyVisionSeries

03 集# OpenCV — 形态学操作 — 如何使用梯度 #PyVisionSeries 进行侵蚀、扩张、边缘检测

04 集# OpenCV — 直方图均衡 — 如何均衡图像直方图 — #PyVisionSeries

05 集# OpenCV — 调整图像大小 — 如何在不失真的情况下调整大小 — #PyVisionSeries

07 第 # 集 # YOLO — 对象检测 — 最先进的对象检测框架!

08 集 # OpenCV — HaashCascate — 对象检测 — Viola–Jones 对象检测框架 — #PyVisionSeries

你可能感兴趣的:(数字图形和图像处理,人工智能,opencv,人工智能,计算机视觉)