Image 如何使用openCV Python3.5从左到右、从上到下将图像裁剪为更小的大小

Image 如何使用openCV Python3.5从左到右、从上到下将图像裁剪为更小的大小,image,python-3.x,opencv,crop,Image,Python 3.x,Opencv,Crop,我有一张315x581的照片。我想在28x28从左上到右下裁剪它,然后我需要将每个28x28图像保存在文件夹中。 我可以从y1=0到y2=28和x1=0到x2=28裁剪一幅图像 第一个问题是:我使用cv2.imwrite(“cropped.jpg”,cropped)来保存这个小图像,但它不保存它,前提是它在上面某行工作 第二个问题是:我如何编写一个代码,它不断地从左到右、从上到下裁剪28x28的图像,并保存每个子图像。 我使用循环,但我不知道如何完成它。 非常感谢你的帮助 这是我的密码 导入c

我有一张315x581的照片。我想在28x28从左上到右下裁剪它,然后我需要将每个28x28图像保存在文件夹中。 我可以从y1=0到y2=28和x1=0到x2=28裁剪一幅图像

第一个问题是:我使用cv2.imwrite(“cropped.jpg”,cropped)来保存这个小图像,但它不保存它,前提是它在上面某行工作

第二个问题是:我如何编写一个代码,它不断地从左到右、从上到下裁剪28x28的图像,并保存每个子图像。 我使用循环,但我不知道如何完成它。 非常感谢你的帮助

这是我的密码

导入cv2
将numpy作为np导入
从PIL导入图像
导入PIL.Image
导入操作系统
导入gzip
导入matplotlib
将matplotlib.pyplot作为plt导入
将matplotlib.cm导入为cm
#%%
image1LL='C:/Users/Tala/Documents/PythonProjects/Poster OpenCV MaskXray/CHNCXR\u 0001\u 0\u LL.jpg'
mask1LL='C:/Users/Tala/Documents/PythonProjects/Poster OpenCV MaskXray/CHNCXR\u 0001\u 0\u threshLL.jpg'
#finalsSave='C:/Users/Tala/Documents/PythonProjects/Poster OpenCV MaskXray/Xray Result'
#加载图像
img=cv2.imread(图像1ll,0)
mask=cv2.imread(mask1LL,0)
#结合前景和背景
finalall=cv2.按位_和(img,img,mask=mask)
cv2.imshow(‘最终’,最终)
cv2.等待键(100)
最终尺寸
最后,形状
#保存图像
cv2.imwrite('finalll.jpg',finalll)
#使用数组切片裁剪图像--这是一个NumPy数组
#毕竟!
y1=0
x1=0
对于范围(0580,28)内的y2:
对于范围(0314,28)内的x2:
裁剪=最终所有[0:28,0:28]
cv2.imshow(“裁剪”,裁剪)
cv2.等待键(100)

imwrite(“crapped.jpg”,crapped)
您的方法很好,但需要进行一些微调。以下代码将帮助您:

import cv2

filename = 'p1.jpg'
img = cv2.imread(filename, 1)

interval = 100
stride = 100
count = 0
print img.shape

for i in range(0, img.shape[0], interval):
    for j in range(0, img.shape[1], interval):
        print j
        cropped_img = img[j:j + stride, i:i + stride]  #--- Notice this part where you have to add the stride as well ---
        count += 1
        cv2.imwrite('cropped_image_' + str(count) + '_.jpg', cropped_img)   #--- Also take note of how you would save all the cropped images by incrementing the count variable ---

cv2.waitKey()
我的结果是: 原始图像:

一些裁剪的图像: 裁剪图像1

裁剪图像2

裁剪图像3


如果您在PyTorch中使用它作为深度学习框架,那么这项任务将非常简单,并且无需任何其他外部图像处理库(如OpenCV)即可完成。下面的代码将以PyTorch张量的形式将单个图像转换为多个图像的堆栈。如果只想使用图像,则需要删除行“transforms.ToTensor()”,并使用matplotlib将代码中的“tens”变量保存为图像

注:此处鸟类图像用于尺寸32 x 32 x 3,裁剪图像5x5x3,步幅=1

image = Image.open('bird.png')
tensreal = trans(image)
trans = transforms.Compose([transforms.Resize(32),
                        transforms.ToTensor(),
                        ])
stride = 1
crop_height = 5
crop_width = 5
img_height = 32
img_width = 32
tens_list = []
for i in range(0,img_width-crop_width,stride):
    for j in range(0,img_height-crop_height ,stride):
        tens = trans(image)
        tens1 =  tens[:, j:j+crop_height, i:i+crop_width]
        tens_list.append(tens1)          
all_tens = torch.stack(tens_list)
print(all_tens.size())

看看如何解决这个问题的答案:非常感谢。这段代码运行良好,但这不是我想要的。我发现我需要使用另一种逻辑来剪切图像。我使用“单击并裁剪”代码裁剪并将带有特定标签的裁剪图像保存在我的文件夹中。不过,再次感谢您的帮助。@Shittel您在找什么?请纠正我!!