删除图像的上角部分

时间:2016-06-10 02:33:55

标签: python image opencv image-processing

我正在使用OpenCV和Python。

我想删除图像的上角部分。

例如,我的图片最初是这样的: enter image description here

之后,我想删除上三角部分。

enter image description here

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

2 个答案:

答案 0 :(得分: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)

Original image

Image with a triangular part "removed"

出于某些目的(混合,插入背景未知的网页等),您可能想要使用支持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

答案 1 :(得分:0)

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

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

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

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

一些样本:

图1

enter image description here

图2

enter image description here

图3

enter image description here

图4

enter image description here