【问题标题】:Removing the upper corner part of the image删除图像的上角部分
【发布时间】:2016-06-10 02:33:54
【问题描述】:

我正在使用 OpenCV 和 Python。

我想去掉图片的上角部分。

例如,我有一个最初是这样的图像:

之后,我想去掉上面的三角形部分。

除了“硬编码”还有什么方法吗?

【问题讨论】:

  • 我不知道您所说的“硬编码”是什么意思,但是您可以使用fillPoly 绘制一个白色三角形,或者使用掩码仅复制相关位。
  • 感谢您的回复。你能解释更多吗?你的意思是我应该先用fillPoly画一个三角形。然后将三角形与我的图像结合起来?
  • 最快的方法是加载图片,然后通过fillPoly在角落绘制一个白色矩形。我对 Python 不是很好,所以我不能展示任何示例代码,但是 here is an examplehere another

标签: python image opencv image-processing


【解决方案1】:

从迂腐的角度来说,您不能删除图像的任何部分,除了两边的条纹,以减少它的宽度或高度。对于看起来像“去除角落部分”,您可以在该角落部分上绘制一个背景色三角形。在这里,假设您想要的背景颜色是白色:

import cv2
import numpy
img = cv2.imread("zebra.jpg")
triangle = numpy.array([[300, 0], [399, 0], [399, 100]])
color = [255, 255, 255] #white
cv2.fillConvexPoly(img, triangle, color)
cv2.imwrite("with_triangle.jpg", img)

出于某些目的(混合、插入背景未知的网页等),您可能希望使用支持 alpha 透明度的图像格式(在您的示例中,您使用的是 jpeg,但不支持)并将 alpha 通道设置为零:

import cv2
import numpy
img = cv2.imread("zebra.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA) #convert to 4-channel image
triangle = numpy.array([[300, 0], [399, 0], [399, 100]])
color = [255, 255, 255, 0] #white with zero alpha
cv2.fillConvexPoly(img, triangle, color)
cv2.imwrite("with_triangle.png", img) #save to PNG for transparency support

【讨论】:

    【解决方案2】:

    上面的答案是“硬编码”,但你已经接受了。您必须手动更改这些值才能为不同的图像创建三角形。检查下面。

    我有一个解决方案,它通过改变单个变量 var 来放置一个三角形,具体取决于三角形的。如果您愿意,您也可以修复单个值。

    只需包含var 并更改下一行,如下所示:

    var = 50
    triangle = np.array([[img.shape[1] - var, 0], [img.shape[1], 0], [img.shape[1], var]])
    

    一些示例:

    图一

    图2

    图 3

    图 4

    【讨论】:

      猜你喜欢
      • 2013-07-15
      • 2021-10-16
      • 2018-02-08
      • 1970-01-01
      • 2021-08-28
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      相关资源
      最近更新 更多