np.hstack 和 np.vstack 不是 运行

np.hstack and np.vstack not run

我想合并三张图片。

img = cv2.imread('Lenna_(test_image).png', 0)
dim = (256, 256)
resizedLena = cv2.resize(img, dim, interpolation = cv2.INTER_LINEAR)

Y 是由 img 修改的图像,X 是由 img 修改的另一个图像,但等于 img

现在,我想将 img, Y, X 与此命令结合使用

newIMG = np.vstack((resizedLena, Y))
outputIMG = np.vstack((newIMG, X))
cv2.imshow('return IMG', outputIMG)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:

  1. 1°图像是我的输出;
  2. 2°图像是img
  3. 3°图像是Y
  4. 4°图像是X

感谢所有帮助过我的人

对于不同尺寸的图片,您可以使用numpy将它们组合起来。然后你可以创建水平组合图像。

您需要确定索引。

例如:

  • 如果第一张图片从0:h1, 0:w1
  • 开始
  • 第二张图片从0:h1, w1:w1 + w2
  • 开始
  • 第三张图片从0:h1, w1 + w2:w1 + w2 + w3
  • 开始
  • 第四张图片从0:h1, w1 + w2 + w3:w1 + w2 + w3 + w4
  • 开始

结果将是:

代码:

from cv2 import imread, imshow, waitKey
from cv2 import IMREAD_GRAYSCALE, imwrite
from numpy import zeros

img1 = imread("1.png", IMREAD_GRAYSCALE)
img2 = imread("2.png", IMREAD_GRAYSCALE)
img3 = imread("3.png", IMREAD_GRAYSCALE)
img4 = imread("4.png", IMREAD_GRAYSCALE)

(h1, w1) = img1.shape[:2]
(h2, w2) = img2.shape[:2]
(h3, w3) = img3.shape[:2]
(h4, w4) = img4.shape[:2]

out = zeros((h1, w1 + w2 + w3 + w4), dtype="uint8")

out[0:h1, 0:w1] = img1
out[0:h1, w1:w1 + w2] = img2
out[0:h1, w1 + w2:w1 + w2 + w3] = img3
out[0:h1, w1 + w2 + w3:w1 + w2 + w3 + w4] = img4

imwrite("out.png", out)

imshow("out", out)
waitKey(0)

使用一行代码完成此操作的三种最佳方法。 但是,要连接的图像必须具有相同的尺寸,尤其是相同的通道数。

import cv2
import numpy as np 


img = cv2.imread('image.jpg')
dim = (256, 256)
resizedLena = cv2.resize(img, dim, interpolation = cv2.INTER_LINEAR)
X, Y = resizedLena, resizedLena

# Method 1: Using Numpy (hstack, vstack)
Fusion_Horizontal = np.hstack((resizedLena, Y, X))
Fusion_Vertical   = np.vstack((newIMG, X))

cv2.imshow('Fusion_Vertical using vstack', Fusion_Vertical)
cv2.waitKey(0)

# Method 2: Using Numpy (contanate)
Fusion_Vertical   = np.concatenate((resizedLena, X, Y), axis=0)
Fusion_Horizontal = np.concatenate((resizedLena, X, Y), axis=1)

cv2.imshow("Fusion_Horizontal usung concatenate", Fusion_Horizontal)
cv2.waitKey(0)


# Method 3: Using OpenCV (vconcat, hconcat)
Fusion_Vertical   = cv2.vconcat([resizedLena, X, Y])
Fusion_Horizontal = cv2.hconcat([resizedLena, X, Y])

cv2.imshow("Fusion_Horizontal Using hconcat", Fusion_Horizontal)
cv2.waitKey(0)

注: 如果图像的尺寸不同,您必须构建一个空矩阵并自行填充,就像之前的 post 一样。

对于您的情况,您可以将所有三个图像都放在参数中

newIMG = np.vstack((resizedLena, Y, X))