簡體   English   中英

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)

Yimg修改的imgXimg修改的另一個圖片,但等於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)

注意:如果圖像沒有相同的尺寸,您必須構建一個空矩陣並自己填充它,就像之前的帖子一樣。

在您的情況下,您可以將所有三個圖像都放在參數中

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM