Selamlar,
aşağıdaki resmin etrafındaki siyah alanları yine aşağıdaki kod ile kırpıyorum. Fakat 2.resimde görüldüğü gibi renkler istediğim gibi çıkmıyor. Yardımcı olabilir misiniz ? Renklerin ilk resimdeki gibi çıkmasını istiyorum.
import cv2
import numpy as np
def trim(frame):
#crop top
if not np.sum(frame[0]):
return trim(frame[1:])
#crop bottom
elif not np.sum(frame[-1]):
return trim(frame[:-2])
#crop left
elif not np.sum(frame[:,0]):
return trim(frame[:,1:])
#crop right
elif not np.sum(frame[:,-1]):
return trim(frame[:,:-2])
return frame
img = cv2.imread("resim.png")
thold = (img>120)*img
trimmedImage = trim(thold)
cv2.imwrite('img.jpg', trimmedImage)
cv2.waitKey()
yanlış renkli hali:
Aşağıdaki fonksiyonu kullanarak sorunu çözdüm.
def autocrop(image, threshold=0):
"""Crops any edges below or equal to threshold
Crops blank image to 1x1.
Returns cropped image.
"""
if len(image.shape) == 3:
flatImage = np.max(image, 2)
else:
flatImage = image
assert len(flatImage.shape) == 2
rows = np.where(np.max(flatImage, 0) > threshold)[0]
if rows.size:
cols = np.where(np.max(flatImage, 1) > threshold)[0]
image = image[cols[0]: cols[-1] + 1, rows[0]: rows[-1] + 1]
else:
image = image[:1, :1]
return image
#yukarıdaki fonksyion numpy array tipinde bir değer döndürüyor bu değeri
#opencv imwrite ile img.png adında bir dosyaya yazdırıyoruz. Bu arada yukarıdaki
#fonksiyona yine array tipinde bir değer vermemiz gerektiği için image parametresine
#değer verirken imread fonksiyonunu kullanmamız gerekiyor. Threshold değerini kendinize
#göre yükseltmeniz gerekiyor çok düşük olursa kırpma yapmıyor.
cv2.imwrite("img.png", autocrop(cv2.imread("resim.png"), threshold=1000))
Wyren
Nisan 13, 2020, 10:04öö
3
Başlığa çözüldü yazmak yerine kendi cevabınızdaki kutucuğu işaretleyebilirsiniz.
1 Beğeni