Merhaba,
Python üzerinde OpenCV kütüphanesi kullanarak her pikselin koordinatına ve renk değerine ulaşabiliyoruz. Görüntüde kare oluşturacak şekilde, karenin köşe koordinatları var elimde. Fakat ben o karenin içindeki bütün piksellerin koordinatlarını çekmek istiyorum. Nasıl bir yol izleyebilirim? Yazı biraz karışık olmuş olabilir, hayırlı günler dilerim.
Merhaba.
import pyautogui
import numpy as np
import cv2 as cv
# Pyautogui yardımıyla ekran görüntüsü alalım.
pyautogui.screenshot("screenshot.png")
# Ekran görüntüsünü açalım.
image = cv.imread("screenshot.png")
# Karenin/Dikdörtgenin konumunu ve boyutunu belirtelim.
x, y = 500, 500
width, height = 200, 200
# Numpy yardımıyla, RGB değerlerini elde edelim.
kare = image[x: x + width, y: y + height]
print(kare)
Yukarıdaki kodda karenin her bir pikselinin RGB değerini (sırası farklı olabilir) elde edebiliyoruz.
image[row, column], buradaki row ve column değerleri zaten o piksele ait x ve y değeri oluyor.
Yani koordinatlar zaten elimizde oluyor.
roi = img[y1:y2, x1:x2]
Görüntünün tanımlı olduğu değişkeni img olarak tanımlarsak yukarıdaki kod ile resimde istediğin kısmı kırpabilirsin. Elindeki karenin koordinatları ile görüntüden istediğin kısmı kırparsan içerisindeki tüm piksellere ulaşmış olursun.
r,c = roi.shape
Satir ve sütun yüksekliğine shape ile ulaşabilirsin.
roi[0,0]
Karendeki ilk pikselin renk değerini dönderecek.
roi[r,c]
Karendeki son pikselin renk değerini dönderecek.
r ve c değerleri içerisinde dönerek karendeki tüm renk değerlerine ulaşabilirsin.
Kare axis-aligned ise kolay: x degeri x1 ile x2 ve y degeri y1 ile y2 arasinda olan butun pikseller. Yani itertools.product(range(x1, x2), range(y1, y2))
.
Degilse isler zorlasiyor. Yukaridaki islemi karenin AABB’una yapip her cikan koordinat icin icerme testi yapabilirsin.
(Daha yazacaktim, fakat “cevaba en fazla soru kadar deger/vakit ver” prensibini edinmeye calisiyorum)