2016-04-11 19 views
1

OpenCV kullanarak (4096x1280'e kadar) üst çizgiye yükseltmek istediğim 512x160 piksel siyah beyaz bir resmim var. Negatif (beyaz) piksellerin negatif olması çok önemlidir. cv2.resize görüntüyü varsayılan olarak yumuşatır ve hatalı pozitif pikseller oluşturur. Kenar yumuşatmayı devre dışı bırakmanın bir yolu var mı?Python'da OpenCV - Kenar yumuşatma olmadan yeniden boyutlandırma

Düzenleme: itibaren ben burada görebilirsiniz enterpolasyon yöntemleri nelerdir:

  • INTER_NEAREST - en yakın komşu interpolasyon
  • INTER_LINEAR - iki doğrusal interpolasyon
  • INTER_CUBIC - bikübik interpolasyon
  • INTER_AREA - kullanarak yeniden örnekleme piksel alan ilişkisi. Moire'-free sonuçları verdiği için, görüntü azaltımı için tercih edilen bir yöntemi olabilir. Ancak görüntü yakınlaştırıldığında, INTER_NEAREST yöntemine benzer.
  • INTER_LANCZOS4 - 8x8 mahallesi üzerinden Lanczos enterpolasyonu.
  • INTER_MAX - enterpolasyon kodları için maske. WARP_FILL_OUTLIERS - bayrak, tüm hedef görüntü piksellerini doldurur. Bazıları kaynak görüntüdeki aykırı değerlere karşılık geliyorsa, sıfıra ayarlanır.
  • WARP_INVERSE_MAP - bayrak, ters dönüşüm.
+3

Eğer piton için muhtemelen aynı, enterpolasyon tipini seçebilir ++. CV_INTER_NEAREST modunu kullanmak isteyebilirsiniz – Micka

+0

@Micka Teşekkür, 'en yakın komşu enterpolasyonu' tam olarak ne anlama geliyor? Yeniden boyutlandırıldıktan sonra – Ricky

+0

yeni bir pikselin hangi renkte alacağı net değildir. Genellikle kaynak görüntüdeki piksellerin bu alandaki enterpolasyonunu yaparsınız. INTER_NEAREST yerine kaynak görüntüdeki en yakın pikselin rengini seçer. – Micka

cevap

0

İnterpolasyon çünkü görüntü orijinal çözünürlüğünü görüntülemek için yeterli çözünürlüğe sahip değildir, bu durumda antialiasing, ters onun tür nasıl karar verir. python'da çözüm cv2.INTER_NEAREST kullanmak olacaktır: c

scale_ratio = 0.5 
img_resized = cv2.resize(img, None, fx=scale_ratio, fy=scale_ratio, interpolation=cv2.INTER_NEAREST) 
İlgili konular