簡體   English   中英

如何將這兩個圖像與python numpy和opencv合並?

[英]how can I merge this two image with python numpy and opencv?

我有兩個二進制圖像。 第一個是這樣的:

在此處輸入圖片說明

最后一個是這樣的:

在此處輸入圖片說明

它們沒有相同大小的曲線。 我想將黑色區域中包含的第二個區域的兩個白色區域添加到第一個區域的黑色區域中。

我的代碼是這樣運行的,但這是一個錯誤的答案:

在此處輸入圖片說明

問題是這樣的,我想得到我用最終 圖像在圖片中繪制 最終 圖像

在此處輸入圖片說明

我該如何完成這項任務?

假設img1是第一個數組(較大的實心斑點),而img2是第二個數組(帶孔的較小實心斑點),則需要一種方法來識別和移除第二個圖像的外部區域。 洪水填充算法是一個很好的選擇。 它在opencv中作為cv2.floodFill

最簡單的方法是填充外部邊緣,然后將結果加在一起:

mask = np.zeros((img2.shape[0] + 2, img2.shape[1] + 2), dtype=np.uint8)
cv2.floodFill(img2, mask, (0, 0), 0, 0)
result = img1 + img2

這是一個玩具示例,在拓撲上顯示的微型圖像與原始圖像相同:

img1 = np.full((9, 9), 255, dtype=np.uint8)
img1[1:-1, 1:-1] = 0
img2 = np.full((9, 9), 255, dtype=np.uint8)
img2[2:-2, 2:-2] = 0
img2[3, 3] = img2[5, 5] = 255

圖像如下所示:

fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.imshow(img1)
ax2.imshow(img2)

開始

洪水填充后,圖像如下所示:

在此處輸入圖片說明

將結果圖像加在一起如下所示:

在此處輸入圖片說明

請記住, floodFill是在floodFill運行的,因此您可能要在走這條路之前制作img2的副本。

我想你想要這個:

#!/usr/local/bin/python3

from PIL import Image,ImageDraw, ImageColor, ImageChops

# Load images
im1 = Image.open('im1.jpg')
im2 = Image.open('im2.jpg')

# Flood fill white edges of image 2 with black
seed  = (0, 0)
black = ImageColor.getrgb("black")
ImageDraw.floodfill(im2, seed, black, thresh=127)

# Now select lighter pixel of image1 and image2 at each pixel location and save it
result = ImageChops.lighter(im1, im2)
result.save('result.png')

在此處輸入圖片說明


如果您更喜歡OpenCV ,它可能看起來像這樣:

#!/usr/local/bin/python3

import cv2

# Load images
im1 = cv2.imread('im1.jpg', cv2.IMREAD_GRAYSCALE)
im2 = cv2.imread('im2.jpg', cv2.IMREAD_GRAYSCALE)

# Threshold, because JPEG is dodgy!
ret, im1 = cv2.threshold(im1, 127, 255, cv2.THRESH_BINARY)
ret, im2 = cv2.threshold(im2, 127, 255, cv2.THRESH_BINARY)

# Flood fill white edges of image 2 with black
h, w = im2.shape[:2]
mask = np.zeros((h+2, w+2), np.uint8)
cv2.floodFill(im2, mask, (0,0), 0)

# Now select lighter of image1 and image2 and save it
result = np.maximum(im1, im2)
cv2.imwrite('result.png', result)

暫無
暫無

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

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