一部のビデオには、枠のような黒い帯のあるフレームがあります。フレームからそれらを削除する必要があります。私は大まかな解決策を思いつきました:
import sys, cv2, numpy
import Image, scipy
filename = "snap.jpeg"
img = cv2.imread(filename)
def checkEqual(lst):
return len(set(lst)) <= 1 ## <-- This is the maximum length of the set
def removeColumns(image):
for col in range(image.shape[1]):
for ch in range(3):
try:
checkEqual(image[:, col, ch].tolist())
except IndexError:
continue
else:
if checkEqual(image[:, col, ch].tolist()):
try:
image = numpy.delete(image, col, 1)
except IndexError:
continue
else:
pass
return image
img2 = removeColumns(img)
print img.shape, img2.shape ## (480, 856, 3) (480, 705, 3)
ここで、同じ要素を持つ列と、黒い枠線を持つすべてのビデオを見つけます。しかし、関数の最大長をcheckEqual()
1 から 20 または 40 に増やしても、黒い帯全体が削除されません。
これは元の画像です:
これは、プログラムを実行した後のイメージです。
この問題のより良い解決策を提案できる人はいますか? ありがとう!