/ / Как мога да изрязвам изображение на по-малък размер от ляво на дясно и отгоре надолу с openCV Python3.5 - изображение, python-3.x, opencv, crop

Как мога да изрязвам изображение на по-малък размер от ляво на дясно и отгоре надолу с openCV Python3.5 - image, python-3.x, opencv, crop

Имам изображение 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

въведете описанието на изображението тук