【问题标题】:Crop an image in multiple rectangles and combine them into one in Python OpenCV在多个矩形中裁剪图像并在 Python OpenCV 中将它们组合成一个
【发布时间】:2018-10-13 06:48:02
【问题描述】:

我被推荐给How to crop an image in OpenCV using Python,但我的问题有点不同。

这可能是一个 numpy 切片问题。我知道我能做到:

import cv2
img = cv2.imread("test_image.jpg")
crop_img = img[y:y+h, x:x+w]

但是,如果我需要两个 y 范围相同但 x 范围与原始图片不连续的矩形怎么办?我试过了:

crop_img = img[y:y+h, [x1:x1+w1, x2:x2+w2]]

我所期望的是一个矩形,其高度从yy+h,宽度从x1x1+w1 加上x2x2+w2,其中x1+w1 不必等于x2。尽管如此,我还是得到了一个带有“无效语法”的SyntaxError。有没有办法正确实现我的目标?

【问题讨论】:

    标签: python numpy opencv slice


    【解决方案1】:

    您必须提取每个部分,然后在 numpy 的 concatenate 函数的帮助下进行连接。

    import numpy as np
    
    v1 = img[y:y+h, x1:x1+w1]
    v2 = img[y:y+h, x2:x2+w2]
    
    v = np.concatenate((v1, v2), axis=1)
    

    或者:

    indexes = ((x1, w1), (x2, w2))
    v = np.concatenate([img[y: y+h , v1: v1+v2] for v1,v2 in indexes], axis=1)
    

    另一种方式:

    将索引创建为列表

    v = img[y:y+h, list(range(x1, x1+w1)) + list(range(x2, x2 + w2))]
    

    【讨论】:

    • 提醒 w1 必须等于 w2 才能在不获取 dtype=object 数组的情况下工作(这可能会破坏任何后续代码)。如果不是,您可能只想输出nD 子数组的列表而不是(n+1)D 数组。
    猜你喜欢
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 2017-09-21
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多