2013-03-23 3 views
75

OpenCV를 사용하여 이전에 PIL에서했던 것처럼 이미지를자를 수 있습니까?Python을 사용하여 OpenCV에서 이미지 자르기 방법

PIL

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

에서 작업 예를하지만 OpenCV의에 그것을 할 수 있습니까?

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) 

그러나 그것은 작동하지 않습니다

이것은 내가 뭘하려합니다.

제가 getRectSubPix을 잘못 사용했다고 생각합니다. 이 경우이 기능을 올바르게 사용할 수있는 방법을 설명하십시오.

답변

209

매우 간단합니다. numpy 슬라이싱을 사용하십시오.

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

음 ... 어떻게 자르기 이미지를 변수에 저장할 수 있습니까? – Nolik

+38

흠, 구문이 img [x : y, x + w : y + h] 또는 img [y : y + h, x : x + w]이면 명확하지 않으므로 슬라이스에 다른 값을 선택했으면 좋겠습니다. – davidgoli

+27

미래의 검색 사용자를위한 서비스 : "우리는 먼저 startY 및 endY 좌표를 제공하고 그 다음에 startX 및 endX 좌표를 슬라이스에 제공합니다." 그래서 [Y1 : Y2, X1 : X2] 내 작물이 이상하게 나오는 이유를 나는 이해할 수 없었다 ; 두 번째 부분은 width : height가 아니며 X1 : X2입니다. http://www.pyimagesearch.com/2014/01/20/basic-image-manipulations-in-python-and-opencv-resizing-scaling -drawing-and-cropping – jmhead

58

내가이 질문을했고 다른 대답을 여기 발견 copy region of interest

을 우리가 고려하는 경우 (0,0) 이미지의 왼쪽 상단 모서리에 im 전화로 왼쪽에서 오른쪽으로 x 방향 매출 신장 등 y 방향으로 하향 이동합니다. 여기

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

numpy array indexing and slicing에 포괄적 인 자원이다 우리는 그 이미지 내의 사각형 영역의 우측 하단 꼭지점로서 왼쪽 상단 꼭지점과 (X2, Y2)와 같은 (X1, Y1)이 이미지의 일부를 잘라내는 것과 같은 것에 대해 더 많이 알려줄 수 있습니다. 이미지는 opencv2에 numpy 배열로 저장됩니다.

:)

관련 문제