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

检测矩形并将图像裁剪到其大小

狄望
2023-03-14

我是图像处理新手,开始学习scikit图像。我试图检测矩形的角,然后裁剪整个图像。但我完全迷失在大量的分割和检测算法中,不知道我需要哪种算法以及如何去做。

此代码生成一个示例图像。我想把它裁剪成绿色的矩形。我需要做什么?

从matplotlib将pyplot导入为pyplot

import numpy as np
import skimage
from skimage import draw

img = np.zeros((500, 500, 3), dtype=np.double)

poly = np.array([[25, 25],
                 [25, 75],
                 [75, 75],
                 [75, 25]])

rr, cc = draw.polygon(poly[:, 0], poly[:, 1], img.shape)

img[rr, cc, 1] = 1
plt.imshow(img)
plt.show()

任务是检测矩形(多边形阵列)的边缘并将图像裁剪到其中。

我尝试了哈里斯角检测,精明的边缘检测和许多其他,但我完全困惑。这似乎是一个简单的任务,但我不明白。

使用OpenCV会更容易做到这一点吗?救命啊!

共有1个答案

潘翊歌
2023-03-14

如果你是绑在一个轮廓寻找方法,OpenCV是目前最好的地方去。如果你能以其他方式识别物体,skImage可以很容易地识别坐标和裁剪图像。例如:

import numpy as np
import skimage
from skimage import draw, measure
import matplotlib.pyplot as plt

# --- Generate test data ---
img = np.zeros((500, 500, 3), dtype=np.double)

poly = np.array([[25, 25],
                 [25, 75],
                 [75, 75],
                 [75, 25]])

rr, cc = draw.polygon(poly[:, 0], poly[:, 1], img.shape)

img[rr, cc, 1] = 1
# --- End generate test data ---

# Generate a mask with all objects close to green
green = (0, 1, 0)
mask = np.sum((img - green)**2, axis=2) < 0.1

# Label the different objects in the image
label_img = measure.label(mask)

# Find all objects
regions = measure.regionprops(label_img)

# Find the first object (since we only have one, that's the rectangle!)
r = regions[0]

# We'll use the `bbox` property to select the bounding box
# # For a full list of properties, take a look at the docstring of
# measure.regionprops

print('The bounding box is {}'.format(r.bbox))

r0, c0, r1, c1 = r.bbox
img_crop = img[r0:r1, c0:c1]

f, (ax0, ax1) = plt.subplots(1, 2)
ax0.imshow(img)
ax1.imshow(img_crop)
plt.show()
 类似资料:
  • 我想从矩形照片中制作一个居中的圆形图像。照片的尺寸未知。通常是矩形。我尝试了很多方法: 密码

  • 问题内容: 我正在从磁盘读取图像,并将其显示在一行中。图像文件大于行中需要显示的图像文件。由于我需要将RAM 缓存在内存中以加快访问速度,因此我希望它们的大小只能与s 一样大(85x85 dip) 现在我正在读文件 位图= BitmapFactory.decodeFile(file); 而ImageView负责缩放和裁剪它 android:scaleType =“ centerCrop” AFAI

  • 我知道实际上用CSS修改图像是不可能的,这就是为什么我在引号中加了crop。 我想做的是拍摄矩形图像,并使用CSS使其显示为方形,而不会扭曲图像。 我基本上想把这个: 对此:

  • 我试图在从图库中选择图像后使用intent来裁剪图像。以下是我的代码片段 在这里,我使用PICK_IMAGE_REQUEST意图句柄调用上面的代码段 由于我在裁剪后使用了相同的意图,即PICK_IMAGE_REQUEST,可能会出现什么问题

  • 我已经在网上搜索过了,我已经找到了一些方法来做我想做的事情,但是与我需要的相比,这些方法在效率上失败了。 我有一个kinect(使用Microsoft SDK),它当前正在获取一个删除背景的人,将结果保存在一个3通道的垫子中,并将该人从背景中删除。现在我需要裁剪图像以只适合那个人,忽略黑色区域。 这里是棘手的部分:我没有很多时间浪费在每个操作上(我还需要做其他几个操作,这应该是实时工作。我目前实现

  • 问题内容: 我想显示具有特定宽度和高度的URL的图像,即使它 具有不同的尺寸比例。所以我想调整大小(保持比例), 然后将图像切成我想要的大小。 我可以使用html img属性调整大小,也可以使用剪切background-image。 我该怎么办? 例: 这个图片: 具有800x600像素大小,我想显示为200x100 像素图像 通过img我可以调整图像大小200x150px: 这给了我这个: 而且