2017-05-15 82 views
1

我想從原始圖像的中心拍攝圖像並將其裁剪75%。說實話,我有點不知所措。我曾想過獲得原始圖像大小如何根據百分比在opencv和python中裁剪圖像

height, width = image.shape 

得到一個百分比值和裁剪:

cropped_y_start = int((height * 0.75)) 
cropped_y_end = int((height * 0.25)) 
cropped_x_start = int((width * 0.75)) 
cropped_x_end = int((width * 0.25)) 

print cropped_x_start 
print cropped_x_end 

crop_img = image[cropped_y_start:cropped_y_end, cropped_x_start:cropped_x_end] 

沒有與此,但主要的一點是它不是基於關閉圖像的中心多重問題。任何意見,將不勝感激。

+2

下面就來仔細想想......想象一些簡單的一種簡單的方法,但對於圖像的任意尺寸在寬度和高度都不同,所以不混淆 - 讓我們去200x100像素。現在想象一下你的意思是「裁剪75%」*。現在嘗試你的公式,看看他們是否出來正確。 –

+2

如果你想把**的高度**減少75%,你需要從頂部刪除37.5%,從底部刪除37.5% - 這意味着你的新底部將比老頂部減少62.5%。 –

+2

如果您想將高度**裁剪爲** 75%,則需要從頂部刪除12.5%,從底部刪除12.5%,這意味着您的新底部將比舊頂部減少87.5%。 –

回答

1

一個簡單的方法是,首先獲得您的縮放的寬度和高度,然後從圖像中心到加裁剪/減去經縮放的寬度和高度由2
這裏劃分是一個例子:

import cv2 


def crop_img(img, scale=1.0): 
    center_x, center_y = img.shape[1]/2, img.shape[0]/2 
    width_scaled, height_scaled = img.shape[1] * scale, img.shape[0] * scale 
    left_x, right_x = center_x - width_scaled/2, center_x + width_scaled/2 
    top_y, bottom_y = center_y - height_scaled/2, center_y + height_scaled/2 
    img_cropped = img[int(top_y):int(bottom_y), int(left_x):int(right_x)] 
    return img_cropped 


img = cv2.imread('lena.jpg') 
img_cropped = crop_img(img, 0.75) 

輸出:
Original
Cropped by 75%