首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NumPy/OpenCV 2:如何裁剪非矩形区域?

NumPy/OpenCV 2:如何裁剪非矩形区域?
EN

Stack Overflow用户
提问于 2013-03-11 22:49:10
回答 2查看 39.1K关注 0票数 42

我有一组构成闭合多段线形状()的点。现在我想复制/裁剪这个shape中某个图像中的所有像素,剩下的则是黑色/透明的。我该怎么做呢?

例如,我有这样的例子:

我想要得到的是:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-12 00:00:39

*编辑-已更新以处理具有alpha通道的图像。

这对我很有效:

  • 制作一个全黑(全蒙版)的蒙版
  • 在感兴趣区域的形状中用白色填充多边形
  • 将蒙版和图像组合在一起,以获得其他所有地方都是黑色的感兴趣区域

对于接受掩码的函数,您可能只想将图像和掩码分开。然而,我相信这做了您特别要求的:

代码语言:javascript
复制
import cv2
import numpy as np

# original image
# -1 loads as-is so if it will be 3 or 4 channel as the original
image = cv2.imread('image.png', -1)
# mask defaulting to black for 3-channel and transparent for 4-channel
# (of course replace corners with yours)
mask = np.zeros(image.shape, dtype=np.uint8)
roi_corners = np.array([[(10,10), (300,300), (10,300)]], dtype=np.int32)
# fill the ROI so it doesn't get wiped out when the mask is applied
channel_count = image.shape[2]  # i.e. 3 or 4 depending on your image
ignore_mask_color = (255,)*channel_count
cv2.fillPoly(mask, roi_corners, ignore_mask_color)
# from Masterfool: use cv2.fillConvexPoly if you know it's convex

# apply the mask
masked_image = cv2.bitwise_and(image, mask)

# save the result
cv2.imwrite('image_masked.png', masked_image)
票数 65
EN

Stack Overflow用户

发布于 2019-03-04 14:39:17

以下代码将有助于裁剪图像并将其置于白色背景中。

代码语言:javascript
复制
import cv2
import numpy as np

# load the image
image_path = 'input image path'
image = cv2.imread(image_path)

# create a mask with white pixels
mask = np.ones(image.shape, dtype=np.uint8)
mask.fill(255)

# points to be cropped
roi_corners = np.array([[(0, 300), (1880, 300), (1880, 400), (0, 400)]], dtype=np.int32)
# fill the ROI into the mask
cv2.fillPoly(mask, roi_corners, 0)

# The mask image
cv2.imwrite('image_masked.png', mask)

# applying th mask to original image
masked_image = cv2.bitwise_or(image, mask)

# The resultant image
cv2.imwrite('new_masked_image.png', masked_image)

输入图像:

遮罩图像:

结果输出图像:

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15341538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档