จะแบ่ง Numpy Array (รูปภาพ) ลงในไทล์เพื่อวนซ้ำได้อย่างไร? [ซ้ำ]
ฉันมีอิมเมจประเภท Numpy Array ซึ่งฉันต้องการแบ่งออกเป็น 9 (3 x 3) แม้แต่ไทล์ซึ่งฉันสามารถทำซ้ำได้ ฉันจะทำเช่นนี้ได้อย่างไร?
นี่คือรหัสของฉันในการสร้าง numpy.ndarray แต่ฉันยังไม่ได้แยกมัน:
อาร์เรย์รูปภาพจำนวนมากที่จะแบ่งคือ th1
import cv2
import numpy as np
# Only for the threshold display
from matplotlib import pyplot as plt
# The Image to be used
image = 'six.png'
# Finding the average greyscale value
image_bgr = cv2.imread(image, cv2.IMREAD_COLOR)
# Calculate the mean of each channel
channels = cv2.mean(image_bgr)
# Type Float
thresh = channels[0]/2
#print (thresh)
# Displaying the threshold value
img = cv2.imread(image,0)
img = cv2.medianBlur(img,5)
# If below then black else white
ret,th1 = cv2.threshold(img,thresh,255,cv2.THRESH_BINARY)
titles = ['Original Image', 'Global Thresholding']
images = [img, th1, ret]
for i in range(2):
plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
# Shows single image on its' own
plt.imshow(images[1], 'gray')
plt.xticks([]),plt.yticks([])
นี่คือภาพ (six.png):
คำตอบ
2 GrgurDamiani
สิ่งที่ฉันจะทำคือสร้างรายการหรืออาร์เรย์ 2 มิติซึ่งฉันจะบันทึก "ไทล์" ของรูปภาพแบบเต็ม กระเบื้องจะถูกคัดลอกโดยใช้รหัสด้านล่าง:
height, width, dim = img.shape
image_tile = img[0:height/3, 0:width/3]
มันจะสร้างใหม่ ndarray image_tileที่มีส่วนหนึ่งของอาร์เรย์ภาพเต็มรูปแบบที่อยู่ภายในของพิกัด ในกรณีนี้เป็นกระเบื้องด้านซ้ายบน
ตัวอย่างทั้งหมดที่มี for loop จะมีลักษณะดังนี้:
image_tile = []
for i in range(0,3):
for j in range(0,3):
image_tile.append(img[i * height/3:(i+1) * height/3, j * width/3:(j+1) * width/3])
ฉันหวังว่านี่จะช่วยได้และโชคดี!
1 Aiyush
ฉันพบวิธีแก้ปัญหาที่ดัดแปลงมาจากที่อื่นและใช้งานได้ดี!
img = th1
numrows, numcols = 3, 3
height = int(img.shape[0] / numrows)
width = int(img.shape[1] / numcols)
for row in range(numrows):
for col in range(numcols):
y0 = row * height
y1 = y0 + height
x0 = col * width
x1 = x0 + width
individual = (img[y0:y1, x0:x1])
plt.imshow(individual, 'gray')
plt.xticks([]),plt.yticks([])
plt.show()