有人能告诉我如何将图像分成上下两部分吗?所以我可以重叠它们。例如,我有一个图像,我应该划分它来计算每个部分的像素数。我是OpenCV的新手,并不完全了解图像的几何形状。
答案 0 :(得分:7)
简化@ avereux的回答:
在Python中,您可以使用拼接将图像分解为子图像。其语法是:
sub_image = full_image[y_start: y_end, x_start:x_end]
请注意,对于图像,原点是图像的左上角。因此,图像第一行(即最顶行)上的像素将具有坐标x_coordinate = x,y_coordinate = 0
要获得图像的形状,请使用image.shape
。这将返回(no_of_rows, no_of_cols)
您可以使用它们按照您想要的方式分解图像。
答案 1 :(得分:5)
您可以水平向下裁剪图像的顶部和底部。
打开图像。
import cv2
import numpy as np
image = cv2.imread('images/blobs1.png')
cv2.imshow("Original Image", image)
cv2.waitKey(0)
使用image.shape
让我们捕捉高度和宽度变量。
height, width = image.shape[:2]
print image.shape
现在我们可以开始裁剪了。
# Let's get the starting pixel coordiantes (top left of cropped top)
start_row, start_col = int(0), int(0)
# Let's get the ending pixel coordinates (bottom right of cropped top)
end_row, end_col = int(height * .5), int(width)
cropped_top = image[start_row:end_row , start_col:end_col]
print start_row, end_row
print start_col, end_col
cv2.imshow("Cropped Top", cropped_top)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Let's get the starting pixel coordiantes (top left of cropped bottom)
start_row, start_col = int(height * .5), int(0)
# Let's get the ending pixel coordinates (bottom right of cropped bottom)
end_row, end_col = int(height), int(width)
cropped_bot = image[start_row:end_row , start_col:end_col]
print start_row, end_row
print start_col, end_col
cv2.imshow("Cropped Bot", cropped_bot)
cv2.waitKey(0)
cv2.destroyAllWindows()
最后,我们可以使用image.size
来使用每个部分中的像素数。
cropped_top.size
cropped_bot.size
你可以用轮廓做同样的事情,但它会涉及边界框。
答案 2 :(得分:2)
这是一种更加灵活的方法,您可以通过该方法将图像切成两半或分成4个相等的部分或6个部分(无论您需要多少部分)。
此代码将图像首先裁剪为2张 然后,对于这2个片段中的每个片段,还将裁剪另外3个图像 留下总共6张裁剪的图像 更改CROP_W_SIZE和CROP_H_SIZE值以调整您的裁剪设置。 您将需要一个CROP文件夹,此代码会将图像保存到该文件夹。
import cv2,time
img = cv2.imread('image.png')
img2 = img
height, width, channels = img.shape
# Number of pieces Horizontally
CROP_W_SIZE = 3
# Number of pieces Vertically to each Horizontal
CROP_H_SIZE = 2
for ih in range(CROP_H_SIZE ):
for iw in range(CROP_W_SIZE ):
x = width/CROP_W_SIZE * iw
y = height/CROP_H_SIZE * ih
h = (height / CROP_H_SIZE)
w = (width / CROP_W_SIZE )
print(x,y,h,w)
img = img[y:y+h, x:x+w]
NAME = str(time.time())
cv2.imwrite("CROP/" + str(time.time()) + ".png",img)
img = img2