Как удалить ненужные углы в opencv?
Привет,
Я пытаюсь избавиться от углов в изображении, где я буду комбинировать это изображение с тремя другими изображениями. Углы закрывали часть изображения рядом с ним. Изображения имеют форму трапеции, потому что я использовал сдвиг перспективы в opencv.
Вот образ сам по себе и когда я пытаюсь совместить его с другим образом.[^]
Вот мой код:
<pre lang="Python"> import cv2 as cv import numpy as np import matplotlib.pyplot as plt def autocrop(image, threshold=0): #Crops the bottom part of the image, but not the corners<pre lang="Python"><pre 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 img1 = cv.imread("testBird.png", 1) #cv.IMREAD_COLOR image = np.zeros((700, 700, 4), np.uint8) src = np.array([[0,200],[480,200],[480,360],[0,360]],np.float32) dst = np.array([[0,0],[480,0],[300,210],[180,210]],np.float32) cvters = cv.cvtColor(img1, cv.COLOR_BGR2GRAY) t, s = cv.threshold(cvters, 1, 255, cv.THRESH_BINARY) rs, gs, bs = cv.split(img1) finals = cv.merge((rs, gs, bs, s)) M = cv.getPerspectiveTransform(src, dst) warp = cv.warpPerspective(finals.copy(), M, (480, 360)) two = warp.copy() three = warp.copy() four = warp.copy() image[:warp.shape[0], 100:warp.shape[1]+100]= warp twoR = cv.getRotationMatrix2D((two.shape[1]/2,two.shape[0]/2),90,1) twoD = cv.warpAffine(two,twoR,(two.shape[1],two.shape[0])) twoD = autocrop(twoD) image[100:twoD.shape[0]+100, 60:twoD.shape[1]+60]= twoD cv.imwrite('blank.png', image)
Я боролся с этой проблемой в течение многих, многих часов, так что любая помощь будет очень признательна! Спасибо!
Что я уже пробовал:
Я пытался сделать пиксели прозрачными с помощью альфа-канала, но у меня так и не получилось(вы все еще можете видеть, что у меня альфа-канал разделен и объединен). Я попробовал обрезку, которая работает для нижней половины изображения, но не для углов. Я пытался сделать контурную обрезку, но это не сработало, хотя я чувствовал, что, возможно, сделал что-то не так.