一个网站用几个域名,做网站都需要哪些软硬件,免费建站软件有哪些,我的世界怎么做购买点卷网站这段代码实现了基于Canny边缘检测和轮廓检测#xff0c;从图像中筛选出面积较大的矩形#xff0c;并使用OpenCV和Matplotlib显示结果。主要流程如下#xff1a;
步骤详解#xff1a; 读取图像#xff1a; img cv2.imread(U:/1.png)使用cv2.imread()加载图像。 转换为灰…这段代码实现了基于Canny边缘检测和轮廓检测从图像中筛选出面积较大的矩形并使用OpenCV和Matplotlib显示结果。主要流程如下
步骤详解 读取图像 img cv2.imread(U:/1.png)使用cv2.imread()加载图像。 转换为灰度图像 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)使用cv2.cvtColor()将图像从BGR色彩空间转换为灰度图以便后续处理。 边缘检测 edges cv2.Canny(gray, 50, 150)使用cv2.Canny()进行Canny边缘检测检测图像中的边缘。 轮廓检测 contours, hierarchy cv2.findContours(edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)使用cv2.findContours()检测图像中的轮廓。参数cv2.RETR_LIST用于提取所有轮廓而cv2.CHAIN_APPROX_SIMPLE用于减少轮廓的点数仅保留直线的端点。 筛选矩形 for cnt in contours:approx cv2.approxPolyDP(cnt, 0.01 * cv2.arcLength(cnt, True), True)if len(approx) 4:area cv2.contourArea(cnt)if area min_area:cv2.drawContours(img, [approx], 0, (0, 255, 0), 3)对每个轮廓进行多边形近似使用cv2.approxPolyDP()方法。判断是否为矩形即有4个顶点。计算轮廓面积并筛选出面积较大的矩形面积大于设定的min_area阈值。用cv2.drawContours()绘制矩形轮廓使用绿色(0, 255, 0)并设定线宽为3。 显示结果 img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
fig, axes plt.subplots(1, 2, figsize(12, 6))
axes[0].imshow(edges, cmapgray)
axes[0].set_title(Edges Detected)
axes[0].axis(off)axes[1].imshow(img_rgb)
axes[1].set_title(Rectangles Detected)
axes[1].axis(off)plt.show()将最终结果BGR图像转换为RGB图像以便正确显示。使用Matplotlib创建一个1行2列的子图左图显示边缘检测结果右图显示带有矩形框的原始图像。plt.show()用于展示结果。
效果
边缘检测图像显示了图像中所有的边缘。带有矩形的最终图像显示了通过轮廓检测与面积筛选出的矩形矩形用绿色框标注。
优化建议
min_area 阈值你可以根据图像内容调整min_area的值以过滤掉较小的噪声。矩形的筛选条件除了长宽比、面积等条件你还可以进一步结合矩形的位置、形态等特征进行更精确的筛选。图像预处理有时在边缘检测前进行图像的平滑处理如高斯模糊可以减少噪声提高检测效果。
该代码适用于需要从图像中提取矩形区域的场景特别适用于图像中具有明显边缘和几何形状的对象。