Имам изображение 315x581. Искам да го изрежете в 28x28 от горния ляв до долу вдясно, след което трябва да запишете всеки 28x28 изображение в папката. Мога да събера само едно изображение от y1 = 0 до y2 = 28 и x1 = 0 до x2 = 28.
Първият проблем е, че използвах cv2.imwrite ("cropped.jpg", изрязан), за да запазя този малък образ, но не го запазва, при условие че работи по някакъв ред по-горе.
Вторият проблем е: Как мога да напиша код, който продължава да изрязва изображението в 28x28 отляво надясно и отгоре надолу и да записва всеки подсметка. Използвах за цикъл, но не знам как да го завърша. Благодаря ви много за всяка помощ.
Тук това е моят код,
import cv2
import numpy as np
from PIL import Image
import PIL.Image
import os
import gzip
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.cm as cm
#%%
image1LL="C:/Users/Tala/Documents/PythonProjects/Poster-OpenCV-MaskXray/CHNCXR_0001_0_LL.jpg"
mask1LL="C:/Users/Tala/Documents/PythonProjects/Poster-OpenCV-MaskXray/CHNCXR_0001_0_threshLL.jpg"
#finalsSave="C:/Users/Tala/Documents/PythonProjects/Poster-OpenCV-MaskXray/Xray Result"
# load the image
img = cv2.imread(image1LL,0)
mask = cv2.imread(mask1LL,0)
# combine foreground+background
final1LL = cv2.bitwise_and(img,img,mask = mask)
cv2.imshow("final1LL",final1LL)
cv2.waitKey(100)
final1LL.size
final1LL.shape
# Save the image
cv2.imwrite("final1LL.jpg",final1LL)
# crop the image using array slices -- it"s a NumPy array
# after all!
y1=0
x1=0
for y2 in range(0,580,28):
for x2 in range(0,314,28):
cropped = final1LL[0:28, 0:28]
cv2.imshow("cropped", cropped)
cv2.waitKey(100)
cv2.imwrite("cropped.jpg", cropped)
Отговори:
0 за отговор № 1Вашият подход е добър, но има нужда от фина настройка. Следният код ще ви помогне:
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