2013-03-23 39 views
75

Görüntüleri daha önce PIL'de yaptığım gibi OpenCV kullanarak nasıl kırpabilirim?Python kullanarak OpenCV'de görüntü kırpma nasıl yapılır

PIL

im = Image.open('0.png').convert('L') 
im = im.crop((1, 1, 98, 33)) 
im.save('_0.png') 

üzerinde çalışma örneği Ama OpenCV üzerinde bunu nasıl?

im = cv.imread('0.png', cv.CV_LOAD_IMAGE_GRAYSCALE) 
(thresh, im_bw) = cv.threshold(im, 128, 255, cv.THRESH_OTSU) 
im = cv.getRectSubPix(im_bw, (98, 33), (1, 1)) 
cv.imshow('Img', im) 
cv.waitKey(0) 

Ama çalışmıyor:

Bu denedim budur.

Yanlışlıkla getRectSubPix kullanıldığını düşünüyorum. Bu durumda, lütfen bu işlevi nasıl doğru şekilde kullanabileceğimi açıklayınız.

cevap

209

Çok basit. Numpy dilimleme kullanın.

import cv2 
img = cv2.imread("lenna.png") 
crop_img = img[y:y+h, x:x+w] 
cv2.imshow("cropped", crop_img) 
cv2.waitKey(0) 
+6

Hmm ... Ancak kırpma görüntüsünü değişkene nasıl kaydedebilirim? – Nolik

+38

Hm, dilimleme için farklı değerler seçmiş olmanızı isterdi, çünkü sözdizimi img [x: y, x + w: y + h] veya img [y: y + h, x: x + w] ise belirgin değil – davidgoli

+27

Gelecekte arama yapanlar için bir hizmet olarak: "Önce startY ve endY koordinatlarını, ardından startX ve endX koordinatlarını dilime veriyoruz." böylece [Y1: Y2, X1: X2] Ürünlerimin neden garip geldiğini anlayamadım; ancak ikinci bölüm genişlik değil: yükseklik, X1: X2 http://www.pyimagesearch.com/2014/01/20/basic-image-manipulations-in-python-and-opencv-resizing-scaling -rotating-and-cropping – jmhead

58

ben bu soru vardı ve burada başka bir cevap buldu: copy region of interest

Biz düşünürsek (0,0) görüntünün sol üst köşesi ile im denilen olarak soldan sağa x yönünde ve üst-olarak y yönü olarak aşağıya doğru. Burada

roi = im[y1:y2, x1:x2] 

numpy array indexing and slicing kapsamlı bir kaynaktır: ve biz o resmin içindeki bir dikdörtgen bölgenin sağ alt köşe olarak sol üst tepe noktası ve (x2, y2) olarak (x1, y1), sahip Görüntünün bir bölümünü kırpmak gibi şeyler hakkında size daha fazla bilgi verebilir. görüntüler opencv2'de numpy dizisi olarak saklanırdı.

:)

İlgili konular