当前位置: 首页 > 面试题库 >

用Opencv-python从图像中裁剪凹多边形

费明诚
2023-03-14
问题内容

闭合多边形的坐标是
[10,150],[150,100],[300,150],[350,100],[310,20],[35,10]. 我要区域边界
通过使用opencv裁剪的凹多边形。我找了其他类似的
但我没能找到正确的答案。所以我才这么问? 你能帮助我吗。
任何帮助都将不胜感激。!!!


问题答案:

步骤

  1. 使用多边形点查找区域
  2. 使用多边形点创建遮罩
  3. 做口罩修剪
  4. 如果需要,添加白色背景

代码:

# 2018.01.17 20:39:17 CST
# 2018.01.17 20:50:35 CST
import numpy as np
import cv2

img = cv2.imread("test.png")
pts = np.array([[10,150],[150,100],[300,150],[350,100],[310,20],[35,10]])

## (1) Crop the bounding rect
rect = cv2.boundingRect(pts)
x,y,w,h = rect
croped = img[y:y+h, x:x+w].copy()

## (2) make mask
pts = pts - pts.min(axis=0)

mask = np.zeros(croped.shape[:2], np.uint8)
cv2.drawContours(mask, [pts], -1, (255, 255, 255), -1, cv2.LINE_AA)

## (3) do bit-op
dst = cv2.bitwise_and(croped, croped, mask=mask)

## (4) add the white background
bg = np.ones_like(croped, np.uint8)*255
cv2.bitwise_not(bg,bg, mask=mask)
dst2 = bg+ dst


cv2.imwrite("croped.png", croped)
cv2.imwrite("mask.png", mask)
cv2.imwrite("dst.png", dst)
cv2.imwrite("dst2.png", dst2)


 类似资料:
  • 本文向大家介绍在Python中使用OpenCV裁剪图像,包括了在Python中使用OpenCV裁剪图像的使用技巧和注意事项,需要的朋友参考一下 什么是裁剪? 裁剪是从摄影或插图图像中去除不需要的外部区域。该过程通常包括去除图像的某些外围区域,以从图片中去除多余的垃圾,改善其取景,改变纵横比,或使主题与背景突出或分离。 我们将使用 OpenCV-python (cv2)的这些函数, imread()

  • 我正在使用Python和Opencv。我现在正在做一个车牌识别项目。我现在可以像这样认出这个盘子: 我得到了这样一个“数组”: 问题是:如何用这些坐标裁剪出边界区域? 因为这四个对应项是排列的,它不是一个矩形,所以我不知道如何才能裁剪出来。

  • 问题内容: 我如何像以前在PIL中一样使用OpenCV裁剪图像。 PIL的工作示例 但是我如何在上做到这一点? 这是我尝试的: 但这是行不通的。 我认为我使用不正确。如果是这种情况,请说明如何正确使用此功能。 问题答案: 非常简单。使用numpy切片。

  • 我需要裁剪图像根据边缘我发现(与给定epsilon) 我有以下说明:Opencv c检测并裁剪图像上的白色区域 有了一个变化-我试图根据我从精明的边缘检测器收到的边缘图像找到矩形: 我遇到的问题是,当我到达第139列时,它会因为以下异常而崩溃: Microsoft C异常:cv::内存位置0x000000EB35DEF170处的异常。 但是,当我使用原始图像(而不是边缘图像)时,它会按预期工作。

  • 我想裁剪图像中最大的对象(字符)。此代码仅在没有线条的情况下有效(如第一幅图所示)。但我需要忽略线,使第二个图像的形象。仅裁剪最大的对象图像。

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