实现了两种不同的图像处理和物体检测方法

这段代码实现了两种不同的图像处理和物体检测方法:一种是基于Canny边缘检测与轮廓分析的方法,另一种是使用TensorFlow加载预训练SSD(Single Shot Multibox Detector)模型进行物体检测。

1. Canny边缘检测与轮廓分析:

首先,通过OpenCV进行图像处理,找到矩形物体并进行绘制:

python 复制代码
image = cv2.imread('U:/1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 高斯模糊
blurred = cv2.GaussianBlur(gray, (5, 5), 0)

# Canny边缘检测
edges = cv2.Canny(blurred, 50, 150)

# 查找轮廓
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for contour in contours:
    # 逼近多边形
    epsilon = 0.04 * cv2.arcLength(contour, True)
    approx = cv2.approxPolyDP(contour, epsilon, True)

    # 如果轮廓有4个点且是矩形
    if len(approx) == 4:
        # 计算矩形的长宽比
        x, y, w, h = cv2.boundingRect(approx)
        aspect_ratio = float(w) / h
        if 0.8 < aspect_ratio < 1.2:  # 如果长宽比接近1,表示是矩形
            # 绘制矩形
            cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)

# 显示结果
cv2.imshow("Detected Rectangles", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 步骤:
    1. 灰度化 :通过cv2.cvtColor()将图像转换为灰度图。
    2. 高斯模糊 :使用cv2.GaussianBlur()进行模糊处理,减少噪声。
    3. Canny边缘检测 :通过cv2.Canny()检测图像中的边缘。
    4. 查找轮廓 :使用cv2.findContours()获取图像的外部轮廓。
    5. 轮廓逼近 :通过cv2.approxPolyDP()简化轮廓形状,逼近为多边形。
    6. 筛选矩形:通过检测轮廓点数为4的多边形,计算长宽比并判断其是否接近正方形(长宽比介于0.8和1.2之间)。
    7. 绘制矩形 :如果符合条件,使用cv2.drawContours()绘制绿色矩形框。

2. SSD模型物体检测:

接下来,使用TensorFlow加载预训练的SSD模型,并在图像上进行物体检测,最后绘制检测框:

python 复制代码
# 加载预训练的SSD模型
model = tf.saved_model.load('ssd_mobilenet_v2_coco/saved_model')

# 读取图片
img = cv2.imread('image_path')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
input_tensor = tf.convert_to_tensor(img_rgb)
input_tensor = input_tensor[tf.newaxis, ...]  # 扩展维度

# 执行推理
model_fn = model.signatures['serving_default']
output_dict = model_fn(input_tensor)

# 获取检测结果
boxes = output_dict['detection_boxes'].numpy()[0]  # 边界框
scores = output_dict['detection_scores'].numpy()[0]  # 置信度
classes = output_dict['detection_classes'].numpy()[0]  # 标签

# 筛选出矩形
threshold = 0.5
for i in range(len(scores)):
    if scores[i] > threshold:
        y1, x1, y2, x2 = boxes[i]
        x1, y1, x2, y2 = int(x1 * img.shape[1]), int(y1 * img.shape[0]), int(x2 * img.shape[1]), int(y2 * img.shape[0])
        cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)

# 显示图像
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.axis('off')
plt.show()
  • 步骤:
    1. 加载SSD模型 :通过tf.saved_model.load()加载一个预训练的SSD模型(ssd_mobilenet_v2_coco)。
    2. 读取图像 :使用cv2.imread()加载图像,并将其转换为RGB格式。
    3. 图像处理:将图像转换为TensorFlow的张量格式,并扩展为批处理维度。
    4. 推理过程 :通过模型的signatures['serving_default']执行推理,获得检测的边界框、置信度和标签。
    5. 筛选结果 :根据置信度(scores)大于设定的阈值(0.5)进行筛选。
    6. 绘制边界框 :使用cv2.rectangle()绘制绿色矩形框,将检测到的物体框出。
    7. 显示图像 :使用matplotlib.pyplot显示处理后的图像。

总结:

  • Canny边缘检测与轮廓分析:通过对图像边缘进行检测,使用轮廓分析找出矩形,并通过长宽比进一步筛选目标。
  • SSD物体检测:利用TensorFlow预训练的SSD模型进行物体检测,并在图像中绘制检测到的物体框。

这两种方法可以结合使用,在某些应用中,如检测特定形状(矩形)和使用深度学习检测物体时,互为补充。

相关推荐
计算机sci论文精选1 分钟前
CVPR 2025 | 具身智能 | HOLODECK:一句话召唤3D世界,智能体的“元宇宙练功房”来了
人工智能·深度学习·机器学习·计算机视觉·机器人·cvpr·具身智能
山烛1 小时前
OpenCV 图像处理基础操作指南(二)
人工智能·python·opencv·计算机视觉
CoovallyAIHub2 小时前
线性复杂度破局!Swin Transformer 移位窗口颠覆高分辨率视觉建模
深度学习·算法·计算机视觉
R-G-B5 小时前
【P38 6】OpenCV Python——图片的运算(算术运算、逻辑运算)加法add、subtract减法、乘法multiply、除法divide
人工智能·python·opencv·图片的运算·图片加法add·图片subtract减法·图片乘法multiply
硅谷秋水6 小时前
在相机空间中落地动作:以观察为中心的视觉-语言-行动策略
机器学习·计算机视觉·语言模型·机器人
hllqkbb6 小时前
从 SGD 到梯度累积:Epoch、Batch、Step 的关系全解析
开发语言·人工智能·opencv·计算机视觉·batch
计算机科研圈7 小时前
ICCV 2025 | 首个3D动作游戏专用VLA模型,打黑神话&只狼超越人类玩家
图像处理·人工智能·3d·黑神话
若天明19 小时前
深度学习-计算机视觉-微调 Fine-tune
人工智能·python·深度学习·机器学习·计算机视觉·ai·cnn
GitLqr19 小时前
AI洞察 | 混元、昆仑 重塑 3D 世界新方向
计算机视觉·游戏开发·音视频开发
图灵学术计算机论文辅导20 小时前
论文推荐|迁移学习+多模态特征融合
论文阅读·人工智能·深度学习·计算机网络·算法·计算机视觉·目标跟踪