You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用TensorFlow识别车牌并完成图像裁剪?

嗨,我来帮你一步步搞定这个需求!咱们拆成两个核心环节来实现:先定位图像里的车牌区域,再用TensorFlow把这块区域裁剪出来。我给你准备了新手友好的代码示例,跟着走就行~

第一步:识别车牌区域

最适合新手快速上手的方案是用OpenCV的Haar级联分类器,它能快速检测出车牌的位置。你需要先准备一个车牌检测的分类器文件(比如haarcascade_russian_plate_number.xml,网上很容易找到,直接下载就行)。

下面是检测车牌的代码示例:

import cv2

# 加载车牌分类器
plate_cascade = cv2.CascadeClassifier('haarcascade_russian_plate_number.xml')

# 读取图像
img = cv2.imread('your_car_image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 检测车牌,返回边界框坐标(x, y, 宽度w, 高度h)
plates = plate_cascade.detectMultiScale(gray, 1.1, 4)

# 假设只取第一个检测到的车牌(如果有多辆的话可以循环处理)
if len(plates) > 0:
    x, y, w, h = plates[0]
    # 可以先画个框看看检测对不对
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
    cv2.imshow('Detected Plate', img)
    cv2.waitKey(0)

如果想要更精准的检测(比如复杂场景下),可以换成预训练的YOLO模型或者专门的车牌检测CNN模型,但Haar分类器足够帮你快速拿到车牌的边界框坐标,先搞定基础版再升级~

第二步:用TensorFlow裁剪车牌区域

拿到了车牌的x, y, w, h之后,就可以用TensorFlow的张量操作来裁剪了。这里有两种常用的方法:

方法1:用tf.image.crop_to_bounding_box(官方推荐)

这个函数专门用来裁剪边界框区域,需要传入图像张量、起始y坐标、起始x坐标、高度和宽度:

import tensorflow as tf

# 把OpenCV读取的图像转换成TensorFlow张量(注意OpenCV是BGR格式,TensorFlow默认是RGB,这里转一下)
tf_img = tf.convert_to_tensor(cv2.cvtColor(img, cv2.COLOR_BGR2RGB), dtype=tf.float32)
# 增加batch维度(因为TensorFlow的图像操作通常需要batch维度)
tf_img = tf.expand_dims(tf_img, 0)

# 裁剪车牌区域
cropped_plate = tf.image.crop_to_bounding_box(
    tf_img,
    offset_height=y,
    offset_width=x,
    target_height=h,
    target_width=w
)

# 去掉batch维度,转换成可显示的格式
cropped_plate = tf.squeeze(cropped_plate, axis=0)
cropped_plate = tf.cast(cropped_plate, tf.uint8).numpy()

# 显示裁剪后的车牌
cv2.imshow('Cropped Plate', cv2.cvtColor(cropped_plate, cv2.COLOR_RGB2BGR))
cv2.waitKey(0)

方法2:手动张量切片

如果你想更灵活地控制,也可以直接用切片操作:

# 同样先转成RGB格式的张量
tf_img = tf.convert_to_tensor(cv2.cvtColor(img, cv2.COLOR_BGR2RGB), dtype=tf.uint8)
# 直接切片[y:y+h, x:x+w, :]
cropped_plate = tf_img[y:y+h, x:x+w, :].numpy()

# 显示结果
cv2.imshow('Cropped Plate', cv2.cvtColor(cropped_plate, cv2.COLOR_RGB2BGR))
cv2.waitKey(0)

注意哦,如果你是直接用TensorFlow读取图像(比如tf.io.read_file),那步骤会更简单,不需要转格式,直接用张量操作就行~

内容的提问来源于stack exchange,提问作者Pratik Kulkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:09:20