टाइल्स पर एक Numpy सरणी (छवि) को विभाजित करने के लिए कैसे? [डुप्लीकेट]
मेरे पास एक 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([])
यहाँ छवि है (छह। भाषा):
जवाब
मैं क्या करूंगा एक सूची या 2-आयामी सरणी बनाऊंगा जिसमें मैं पूरी छवि के "टाइल" को बचाऊंगा। नीचे दिए गए कोड का उपयोग करके टाइलों की नकल की जाएगी:
height, width, dim = img.shape
image_tile = img[0:height/3, 0:width/3]
यह एक नया ndarray image_tile बनाता है जिसमें निर्देशांक के अंदर पूर्ण छवि सरणी का हिस्सा होता है। इस मामले में यह शीर्ष बाईं टाइल है।
लूप के लिए संपूर्ण उदाहरण कुछ इस तरह दिखाई देगा:
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])
मुझे आशा है इससे मदद मिलेगी और भाग्य आपका साथ दे।
मैंने एक समाधान कहीं और से अनुकूलित पाया है और यह बहुत अच्छा काम करता है!
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()