Python ile aşağıdaki görüntünün dış hatlarının koordinatları (x, y) ile bir matris elde etmem gerekiyor.Python ile görüntüdeki bir şeklin kontur (x, y) koordinatlarını alın
Ben opencv açıkgöz detektörlü denemek ve hatlarını bulmak ama hatlarına çok olsun ve ne istersem edinmeyle bilmiyorum.
import numpy as np
from matplotlib import pyplot as plt
import cv2
#from skimage import measure, feature, io
#from skimage import img_as_ubyte
x1 = 330
xf = 690
y1 = 0
yf = 400
img = cv2.imread('test.tif')
img = img[y1:yf, x1:xf]
edge = cv2.Canny(img, 100, 200)
image, contours, hierarchy = cv2.findContours(edge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
Sadece (x, y) ile bir dizi mi çevritinin koordine eder. Bunun
cv2.findContours()
kontür çıktıda olduğunu düşünüyorum ama ben de
matplotlib.pyplot.contour
fonksiyonu ile çalıştı
istediğim kontur ... bulmuyorum:
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('test.tif', 0) # read image
img = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU)[1] # threshold image
img = cv2.medianBlur(img, 15) # remove noise
# skeletonize
size = np.size(img) # get number of pixels
skel = np.zeros(img.shape, np.uint8) # create an array of zeros with the same shape as the image and 256 gray levels
element = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) # create a structurant element (cross)
done = False
while(not done):
eroded = cv2.erode(img, element)
temp = cv2.dilate(eroded, element)
temp = cv2.subtract(img, temp)
skel = cv2.bitwise_or(skel, temp)
img = eroded.copy()
zeros = size - cv2.countNonZero(img)
if zeros == size:
done = True
cs = plt.contour(skel, 1)
p = cs.collections[0].get_paths()[0]
v = p.vertices
x = v[:, 0]
y = v[:, 1]
Ama sadece var kapalı konturlar ve görüntünün solundan sağa giden açık konturu değil.
Cevabınız için çok teşekkürler.
'Kontur' ile ne demek istiyorsun? Beklenen çıktınız nedir? Açık ol. – barny
Yorumunuz için teşekkürler @barny. Kontur olarak, soldan sağa doğru giden ve yoğunluk gradyanının maksimum olduğu noktalardan geçen bir çizgi demek istiyorum. Ve bir matriste bu çizginin (x, y) koordinatlarına ihtiyacım var. – razoool