2016-03-31 30 views
6

Ben bir resmin kırmızı kanal Renk alanını almaya çalışıyorum, ben yapıyorum şu anda yolu, bir grayscale görüntü elde:Görüntünün kırmızı kanal rengi alanı nasıl alınır?

img = img[:,:,2] 

Ama hiç böyle bir görüntü istiyorum:

Yukarıda, üstteki resim kırmızı kanallı renk uzay görüntüsüdür ve en alttaki görüntü orijinal görüntüdür. Bu görüntüyü elde etmek için tam olarak ne yapılmalı?

Ben de

img[:,:,0] = 0 
img[:,:,1] = 0 

denedim Ama arzu edildiği gibi elde edilen sonucu değildir. Kırmızı kanal renk uzayı ile ilgili bir makale: https://en.wikipedia.org/wiki/RG_color_space
+0

Muhtemelen mavi kanalı orijinal BGR görüntüsünde 0'a ayarlamanız gerekiyor: 'img [:,:, 0] = 0' – Miki

+0

Denedim, ancak sonuçta imgur bağlantısı. –

+1

Kaldırılan renk kanalının kırmızı değil, yeşil ve mavi karışımı olduğunu düşünüyorum. Görüntüyü InkScape (veya başka bir resim işleme yazılımı) içinde açmanızı ve renk düzeyleriyle oynamanızı öneririm. Doğru kombinasyonu belirledikten sonra hatırlatıcıyı kaldırın. – Crolle

cevap

1

Gerçekte, beklenen çıktı resminiz orijinalin kırmızı kanal rengi alanı değildir. Bu, giriş görüntüsüne uygulanan COLORMAP türüdür. İyi haber, OpenCV'nin birden fazla dahili renk eşlemi oluşturmasıdır. Kötü haber, beklenen çıktının OpenCV'nin yerleşik renk haritaları tarafından üretilememesidir. Ancak pes etmeyin, renkleri cv2.LUT() işlevini kullanarak özel bir arama tablosu kullanarak eşleyebilirsiniz. Daha iyi gösteri için

burada görüntü ile bazı örnekler:

img = cv2.imread('origin.png') 
im_color = cv2.applyColorMap(img, cv2.COLORMAP_HSV) 
cv2.imshow('mapped_image', im_color) 
# cv2.imwrite('result.png', im_color) 
cv2.waitKey(0) 
İşte

enter image description here

tüm OpenCV renk eşleminin en:

print [sub for sub in dir(cv2) if sub.startswith('COLORMAP_')] 
['COLORMAP_AUTUMN', 'COLORMAP_BONE', 'COLORMAP_COOL', 'COLORMAP_HOT', 'COLORMAP_HSV', 'COLORMAP_JET', 'COLORMAP_OCEAN', 'COLORMAP_PINK', 'COLORMAP_RAINBOW', 'COLORMAP_SPRING', 'COLORMAP_SUMMER', 'COLORMAP_WINTER'] 

göndermek için özel bir renk eşleme için bir örnek cv2.LUT() numaralı arama tablosu:

table = np.array([(i * invert_value) for i in np.arange(256)]).astype("uint8") 
cv2.LUT(image, table) 
+0

Mükemmel. Ama 'cv2.LUT()' bana bir dizi verecek, bir renk haritası veya bir şey inşa etmem mi gerekiyor? Hayır ise, hangi kullanım cv2.LUT() 'nin çıkış dizisidir? –

+0

@stack Her Resim bir dizidir :-) ancak OpenCV tarafından bir resim olarak tanımlanabilmesi için onu uygun bir türe dönüştürmeniz gerekir. Cevabı bir örnekle güncelleyeyim. – Kasramvd

+0

@stack Ayrıca, beklenen sonuca dönüştürmek için dahili "COLORMAP" lerden birinin sonucu üzerinde işlem yapmak isteyebileceğinizi de unutmayın. – Kasramvd

1

İkinci öneriniz mavi ve yeşil renkleri atmalı ve size bir "kırmızı kanal görüntüsü" vermelidir. Ortaya çıkan görüntü bilgisi üçünde de terk eder etmez,

img[:,:,0] = 0 

Ama bunu göstermek değil yayınlanmıştır örnek görüntü: Bir RG (kırmızı-yeşil) renk alanı görüntü istiyorsanız, uzakta sadece mavi kanal atmak kanalları. Tahminimce, farklı renklerin orijinal görüntüdeki farklı kırmızı değerlerini temsil ettiği bir "renk haritası" ile üretildi. Böyle bir haritalama istediğiniz gibi görünebilir, bu yüzden örnek resimlerinizden yeniden yapılandırmanız kolay değildir.

İlgili konular