2013-03-23 110 views
75

Làm thế nào tôi có thể cắt hình ảnh, như tôi đã thực hiện trước đó trong PIL, sử dụng OpenCV.Làm thế nào để cắt một hình ảnh trong OpenCV bằng cách sử dụng Python

dụ làm việc trên PIL

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

Nhưng làm thế nào tôi có thể làm điều đó trên OpenCV?

Đây là những gì tôi đã cố gắng:

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) 

Nhưng nó không hoạt động.

Tôi nghĩ rằng tôi đã sử dụng sai getRectSubPix. Nếu trường hợp này xảy ra, hãy giải thích cách tôi có thể sử dụng đúng chức năng này.

Trả lời

209

Rất đơn giản. Sử dụng cắt gọt.

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 ... Nhưng làm thế nào tôi có thể lưu hình ảnh cắt thành biến? – Nolik

+38

Hm, ước gì bạn đã chọn các giá trị khác nhau cho việc cắt, vì nó không rõ ràng nếu cú ​​pháp là img [x: y, x + w: y + h] hoặc img [y: y + h, x: x + w] – davidgoli

+27

Là dịch vụ cho những người tìm kiếm trong tương lai: "Trước tiên chúng tôi cung cấp tọa độ startY và endY, tiếp theo là tọa độ startX và endX với slice". vì vậy [Y1: Y2, X1: X2] Tôi không thể tìm ra lý do tại sao cây trồng của tôi lại xuất hiện lạ lùng; nhưng phần thứ hai không phải là chiều rộng: chiều cao, đó là X1: X2 http://www.pyimagesearch.com/2014/01/20/basic-image-manipulations-in-python-and-opencv-resizing-scaling -rotating-and-crop – jmhead

58

tôi đã có câu hỏi này và tìm thấy một câu trả lời ở đây: copy region of interest

Nếu chúng ta xem xét (0,0) như góc trên bên trái của hình ảnh được gọi là im với trái sang phải như x hướng và từ trên từ dưới lên dưới dạng y. và chúng tôi có (x1, y1) là đỉnh phía trên bên trái và (x2, y2) là đỉnh dưới bên phải của một khu vực hình chữ nhật trong hình ảnh, sau đó:

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

đây là một nguồn lực toàn diện về numpy array indexing and slicing có thể cho bạn biết thêm về những thứ như cắt xén một phần của hình ảnh. hình ảnh sẽ được lưu trữ như một mảng numpy trong opencv2.

:)

Các vấn đề liên quan