Member 12631620 Ответов: 0

Как удалить ненужные углы в 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)


Я боролся с этой проблемой в течение многих, многих часов, так что любая помощь будет очень признательна! Спасибо!

Что я уже пробовал:

Я пытался сделать пиксели прозрачными с помощью альфа-канала, но у меня так и не получилось(вы все еще можете видеть, что у меня альфа-канал разделен и объединен). Я попробовал обрезку, которая работает для нижней половины изображения, но не для углов. Я пытался сделать контурную обрезку, но это не сработало, хотя я чувствовал, что, возможно, сделал что-то не так.

0 Ответов