簡體   English   中英

OpenCV:使用 Trimap 圖像

[英]OpenCV : Using a Trimap image

我找到了這個狗和貓的圖像數據集: The Oxford-IIIT Pet Dataset 每個圖像都有一個像素級的前景-背景分割(trimap)圖像。

網上查了一下,trimap是三種顏色的圖片(一種用於背景,一種用於前景,一種用於未分類區域),但這里的圖像是全黑的。

這是錯誤還是正確? 但最重要的是,我想知道您是否以及如何使用它來獲取給定正常圖像的黑色背景上的貓或狗的新圖像。

謝謝。

Trimaps 看起來是黑色的,因為它們只包含 0-2 范圍內 0-255 的像素值,其中:

  • 1 表示“寵物”
  • 2 表示“背景”
  • 3 表示“邊界”

查看文本形式的像素:

identify -verbose Abyssinian_1trimap.png  | more

輸出

  Histogram:
     22938: (  1,  1,  1) #010101 gray(1)
    198766: (  2,  2,  2) #020202 gray(2)
     18296: (  3,  3,  3) #030303 gray(3)

如果您對比拉伸三邊形,您可以看得更清楚。 我在這里使用了Abyssinian1圖像:

convert Abyssinian_1trimap.png -auto-level trimap.jpg

在此處輸入圖片說明

如果您將 Trimap 中的所有1像素設為白色,將所有2像素設為黑色,將所有3像素設為白色,並使用darken混合將其與實際照片混合,您將得到您想要的結果:

convert Abyssinian_1.jpg \( Abyssinian_1trimap.png -fill white -opaque "rgb(1,1,1)" -opaque "rgb(3,3,3)" -fill black -opaque "rgb(2,2,2)" \) -compose darken -composite pet.png

在此處輸入圖片說明

如果您想要邊框和寵物,請執行以下操作:

convert Abyssinian_1.jpg \( Abyssinian_1trimap.png -fill white -opaque "rgb(1,1,1)" -opaque "rgb(3,3,3)" -fill black -opaque "rgb(2,2,2)" \) -compose darken -composite pet.png

在此處輸入圖片說明

您還可以嘗試模糊蒙版以柔化邊緣:

convert Abyssinian_1.jpg \( Abyssinian_1trimap.png -fill white -opaque "rgb(1,1,1)" -fill black -opaque "rgb(3,3,3)" -opaque "rgb(2,2,2)" -blur 0x8  \) -compose darken -composite pet.png

在此處輸入圖片說明

抱歉,我是用ImageMagick做的,因為我覺得這更容易,而且它安裝在大多數 Linux 發行版上,可用於 macOS 和 Windows。 OpenCV 的原理是一樣的。

也為此苦苦掙扎了一段時間,直到我終於弄明白了。要在 Python 中加載和顯示這些文件,您需要這個

import io
import os
import tensorflow as tf
import PIL
import matplotlib.pyplot as plt
import numpy as np

with tf.gfile.GFile("Abyssinian_1.png", 'rb') as fid:
    encoded_mask_png = fid.read()
encoded_png_io = io.BytesIO(encoded_mask_png)
mask = PIL.Image.open(encoded_png_io)            
plt.imshow( np.array(mask) / 2 * 255 )

暫無
暫無

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

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