网站价位,深圳装修网站建设,视网站亏损了为什么还做,电商法规定企业网站必须做3年这段代码实现了两种不同的图像处理和物体检测方法#xff1a;一种是基于Canny边缘检测与轮廓分析的方法#xff0c;另一种是使用TensorFlow加载预训练SSD#xff08;Single Shot Multibox Detector#xff09;模型进行物体检测。
1. Canny边缘检测与轮廓分析#xff1a; …这段代码实现了两种不同的图像处理和物体检测方法一种是基于Canny边缘检测与轮廓分析的方法另一种是使用TensorFlow加载预训练SSDSingle Shot Multibox Detector模型进行物体检测。
1. Canny边缘检测与轮廓分析
首先通过OpenCV进行图像处理找到矩形物体并进行绘制
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) / hif 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()步骤 灰度化通过cv2.cvtColor()将图像转换为灰度图。高斯模糊使用cv2.GaussianBlur()进行模糊处理减少噪声。Canny边缘检测通过cv2.Canny()检测图像中的边缘。查找轮廓使用cv2.findContours()获取图像的外部轮廓。轮廓逼近通过cv2.approxPolyDP()简化轮廓形状逼近为多边形。筛选矩形通过检测轮廓点数为4的多边形计算长宽比并判断其是否接近正方形长宽比介于0.8和1.2之间。绘制矩形如果符合条件使用cv2.drawContours()绘制绿色矩形框。
2. SSD模型物体检测
接下来使用TensorFlow加载预训练的SSD模型并在图像上进行物体检测最后绘制检测框
# 加载预训练的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()步骤 加载SSD模型通过tf.saved_model.load()加载一个预训练的SSD模型ssd_mobilenet_v2_coco。读取图像使用cv2.imread()加载图像并将其转换为RGB格式。图像处理将图像转换为TensorFlow的张量格式并扩展为批处理维度。推理过程通过模型的signatures[serving_default]执行推理获得检测的边界框、置信度和标签。筛选结果根据置信度scores大于设定的阈值0.5进行筛选。绘制边界框使用cv2.rectangle()绘制绿色矩形框将检测到的物体框出。显示图像使用matplotlib.pyplot显示处理后的图像。
总结
Canny边缘检测与轮廓分析通过对图像边缘进行检测使用轮廓分析找出矩形并通过长宽比进一步筛选目标。SSD物体检测利用TensorFlow预训练的SSD模型进行物体检测并在图像中绘制检测到的物体框。
这两种方法可以结合使用在某些应用中如检测特定形状矩形和使用深度学习检测物体时互为补充。