当前位置: 首页 > 知识库问答 >
问题:

Python:检测图像中的边矩形

云利
2023-03-14

我已经了解了如何使用PIL检测图像中的边缘(图像大部分是白色背景和黑色绘图标记)。如何检测包含这些边的矩形,以便裁剪图像。

例如,我想裁剪如下内容:

成:

或者这个:

成:

我熟悉PIL中的裁剪,但不知道如何围绕对象自动居中。

我已通过执行以下操作来检测边缘:

from PIL import Image, ImageFilter
image = Image.open("myImage.png")
image = image.filter(ImageFilter.FIND_EDGES)

如何得到包含所有这些边的矩形?

共有1个答案

夏侯朝斑
2023-03-14

你可以这样做,例如使用opencv

import cv2

#Load the image in black and white (0 - b/w, 1 - color).
img = cv2.imread('input.png', 0)

#Get the height and width of the image.
h, w = img.shape[:2]

#Invert the image to be white on black for compatibility with findContours function.
imgray = 255 - img
#Binarize the image and call it thresh.
ret, thresh = cv2.threshold(imgray, 127, 255, cv2.THRESH_BINARY)

#Find all the contours in thresh. In your case the 3 and the additional strike
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
#Calculate bounding rectangles for each contour.
rects = [cv2.boundingRect(cnt) for cnt in contours]

#Calculate the combined bounding rectangle points.
top_x = min([x for (x, y, w, h) in rects])
top_y = min([y for (x, y, w, h) in rects])
bottom_x = max([x+w for (x, y, w, h) in rects])
bottom_y = max([y+h for (x, y, w, h) in rects])

#Draw the rectangle on the image
out = cv2.rectangle(img, (top_x, top_y), (bottom_x, bottom_y), (0, 255, 0), 2)
#Save it as out.jpg
cv2.imwrite('out.jpg', img)
 类似资料:
  • 本文向大家介绍使用OpenCV检测图像中的矩形,包括了使用OpenCV检测图像中的矩形的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了OpenCV检测图像中矩形的具体代码,供大家参考,具体内容如下 前言 1.OpenCV没有内置的矩形检测的函数,如果想检测矩形,要自己去实现。 2.我这里使用的OpenCV版本是3.30. 矩形检测 1.得到原始图像之后,代码处理的步骤是: (1)滤波

  • 我不熟悉Python中的图像处理,我正在尝试解决一个常见问题。我有一张有人签名的照片。我想找到边缘并裁剪它以适合图像中的签名。 我尝试了Canny边缘检测和使用现有解决方案列表裁剪图像 我尝试了一些解决方案: > https://www.quora.com/How-can-I-detect-an-object-from-static-image-and-crop-it-from-the-image

  • 本文向大家介绍Python中使用OpenCV(CV2)对图像进行边缘检测,包括了Python中使用OpenCV(CV2)对图像进行边缘检测的使用技巧和注意事项,需要的朋友参考一下 使用的模块: 为此,我们将使用opencv-python模块,该模块为我们提供了处理图像的各种功能。 下载opencv-python opencv-python模块: opencv-python是一个python库,它将

  • 本文向大家介绍C#图像边缘检测(Roberts)的方法,包括了C#图像边缘检测(Roberts)的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#图像边缘检测(Roberts)的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 所以我试图用pygame制作一个我们之间的游戏。我刚刚开始,所以我没有太多东西,现在正在制作地图。然而,我正在努力解决的一件事是碰撞逻辑。地图目前有一个细长的八边形形状,但是我想不管是什么形状,我都会使用类似pygame多边形的东西。当我运行我现在的代码时,它会检查我的玩家(pygame矩形)和墙壁(pygame多边形)之间的碰撞,它说: 我发现这是因为pygame多边形返回了一个矩形,但在碰撞检

  • 我有一个盒子的图像。我试图检测角点并从圆圈中标记这些角点。我正在为此使用以下代码: