टाइल्स पर एक Numpy सरणी (छवि) को विभाजित करने के लिए कैसे? [डुप्लीकेट]

Jan 04 2021

मेरे पास एक 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 GrgurDamiani Jan 04 2021 at 18:57

मैं क्या करूंगा एक सूची या 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])

मुझे आशा है इससे मदद मिलेगी और भाग्य आपका साथ दे।

1 Aiyush Jan 04 2021 at 19:31

मैंने एक समाधान कहीं और से अनुकूलित पाया है और यह बहुत अच्छा काम करता है!

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()